首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有一种不用代码就能在UIViewController中画线的方法?

在UIViewController中画线的方法有多种,其中一种不需要编写代码的方法是使用Interface Builder中的Storyboard或XIB文件来绘制线条。

  1. 打开Storyboard或XIB文件,并选择要添加线条的UIViewController。
  2. 在Interface Builder中,选择合适的视图控件(如UIView)作为线条的容器。
  3. 在属性检查器中,找到"Identity Inspector"(标识检查器)并为该视图控件设置一个唯一的标识符(如"lineView")。
  4. 在"Attributes Inspector"(属性检查器)中,找到"User Defined Runtime Attributes"(用户自定义运行时属性)部分,并点击"+"按钮添加一个新的属性。
  5. 设置以下属性:
    • Key Path: layer.borderWidth
    • Type: Number
    • Value: 设置线条的宽度(例如1)
  6. 再次点击"+"按钮添加另一个新的属性。
  7. 设置以下属性:
    • Key Path: layer.borderColor
    • Type: Color
    • Value: 设置线条的颜色(例如红色)
  8. 在Storyboard或XIB文件中,将视图控件的Class设置为"UIView"。
  9. 在UIViewController的代码中,添加以下方法:
代码语言:swift
复制
override func viewDidLoad() {
    super.viewDidLoad()
    addLine()
}

func addLine() {
    if let lineView = view.viewWithTag(123) {
        lineView.layer.borderWidth = lineView.value(forKeyPath: "layer.borderWidth") as? CGFloat ?? 0
        lineView.layer.borderColor = (lineView.value(forKeyPath: "layer.borderColor") as? UIColor)?.cgColor
    }
}
  1. 运行应用程序,您将在UIViewController中看到绘制的线条。

这种方法通过在Interface Builder中设置运行时属性来绘制线条,无需编写额外的代码。您可以根据需要调整线条的宽度和颜色。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优雅的使用UITableView

维护的东西越多,意味着你出错的概率是越大的。 那有没有什么好的方法处理这类代码? 分析 其实我们仔细想想,无论一个多么复杂的UITableView,与之对应的其实只要一个模型数组。...如果这里想不明白,再看看我们上面的分析,一种cell样式对应着一种模型,那么我们知道了模型,是不是就知道了cell样式 如果你还是不大清楚,那们就进入实战部分 实战 [image.png] 先看这样一个简单的页面...下面看看通过UITableView构建的UI 展示 [image.png] SignInVC 中的代码: [image.png] [image.png] PasswordSignVC 中的代码: [image.png...Cell上事件的回调 有人肯定会不屑这里,但是我想说:如果不用block、代理、观察者。...; } ButtonCell事件绑定代码: [image.png] 这里我们还是要用一个协议的: [image.png] 注意 用这个协议主要是方便代码的阅读,而且在Swift中是必须使用协议的,因为编译时找不到这个方法

99700

【IOS开发进阶系列】IOS常用开发技巧专题

1     工程配置类 1.1     添加预编译文件     将AFNetworking添加到预编译头文件,意味着这个框架会被自动的添加到工程的所有源代码文件中。...然后, 最关键的一步来了, 那就是…     重新运行项目(不用重启Xcode也可以),看如下图~~ 就代表成功啦 那么现在我们继续在控制台输入po self.view.frame 成功了!...有时候我们只想支持一种平台,怎么办呢?...代码基础 5.1     数据类型相关 5.1.1 Objective-C中的instancetype和id区别     instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!...问题原因:imageNamed读取图片的方法,会缓存在内存中,所以较大的图片,还是用imageWithContentsOfFile。?

45940
  • iOS 转场动画探究(一)

    ** 下面是这几个方法的代码的注释,它的一些注意的地方以及一些解释在下面代码的注释中有,看了下面的方法,我们也就大概掌握了这个协议: #pragma mark - UIViewControllerTransitioningDelegate...这个协议看的出来还是很简单的,终于不用那么长了是吗?哈哈.....        ...EXAMPLE-ONE:        下面的GIF实例分为三个,我们用我们上面说的第一点个第二点要素就能完成的是第一种,逐渐显示,第二种的话需要我们接下来要说的第三点交互控制器协议方法面的东西,我们就在下面第三点说完再说...Demo的下载地址我在这里给大家,我们现在说的就先是第一种:逐渐出现的转场       前面的用UICollectionView写的那个圈圈,哈哈.....圈圈代码在ViewController里面,重要的其实就是每一个...它里面的方法就这四个,简单说下这四个方法:             a: 第一个方法是暂停交互              b: 第二个是更新方法,一般交互时候的进度更新就在这个方法里面

    2.7K50

    打造完备的iOS组件化方案:如何面向接口进行模块解耦?

    URL 路由支持 • 在每个 router 子类中可以进行更详细的依赖注入和自定义操作 • 可以自定义创建对象的方式,例如自定义初始化方法、工厂方法,在重构时可以直接搬运现有的创建代码,无需在原来的类上增加或修改接口...例如 URL 地址变化了,但是代码中的某些 URL 没有及时更新;使用 protocol 获取模块时,protocol 并没有注册对应的模块。这些问题都只能在运行时才能发现。...那么有没有一种方式,可以让模块既高度解耦,又能在编译时保证调用的模块一定存在呢? 答案是 YES。...要实现最完备的类型检查,就不能忽视这个问题。 有没有一种方式能让返回值的类型和 protocol 的类型对应呢?OC 中的泛型在这时候就发挥作用了。...在 OC 中可以在 +load 方法中注册,但是 Swift 里已经不能使用 +load 方法,而且分散在 +load 中的注册代码也不好管理。

    7.8K43

    iOS 开发:『Runtime』详解(二)Method Swizzling

    而使用 +initialize 方法则不能保证这一点,有可能在使用的时候起不到交换方法的作用。 Method Swizzling 在 +load 中执行时,不要调用 [super load];。...先来思考一下有几种实现方式: 第一种:手动添加 直接在所有页面添加一次统计代码。你需要做的是写一份统计代码,然后在所有页面的 viewWillAppear: 中不停的进行复制、粘贴。...第一种:手动修改 所有用到的 UIFont 的地方,手动判断,添加适配代码。一想到那个工作量,不忍直视。 第二种:利用宏定义 在 PCH 文件定义一个计算缩放字体的方法。...第一种:利用 Delay 延迟,和不可点击方法。 这种方法很直观,也很简单。但就是工作量很大,需要在所有有按钮的地方添加代码。很不想承认:在之前项目中,我使用的就是这种方式。...那么加载占位图有没有什么好的方法或技巧? 第一种:刷新数据后进行判断 这应该是通常的做法。

    2K31

    价值百万的像素填色解决方案,想开发绘本应用的有福了!

    魔术橡皮擦 大家好,我是麦芽的香气,一个喜欢解决产品来解决需求的开发者。4年Cocos Creator小游戏、教育App开发,今天给大家分享一些我在工作中积累的小经验Demo。...画线和橡皮檫,通过像素画线来解决该痛点(橡皮檫功能,且背景不是纯白底图) 给一张图片进行填色,儿童小游戏 本案例Demo 代码已经分享到 Cocos Store 感谢大家的支持!...一、变色原理 在求职面试过程中,大家有没有在被问到这样一个问题:你知道一张1024 * 1024 大小的图占多大内存吗?...原图 修改部分透明 不知道大家有没有玩过官方案例里面的截图,如果没有。...个点,如下图方法: img 当获取这些点转换为[R,G,B,A,R,G,B,A,R,G,B,A..............]的索引铅笔,就改变 RGB 值,橡皮檫就改变 A 的值,那么就实现出了我们的像素画线和橡皮檫功能

    89930

    JSPatch 实现原理详解

    这样做不用去 OC 遍历对象方法,不用在 JS 对象保存这些方法,内存消耗直降 99%,这一步是做这个项目最爽的时候,用一个非常简单的方法解决了严重的问题,替换之前又复杂效果又差的实现。...OC,就完成了实例方法的调用。...函数里,在这个新的IMP函数里调用 JS 传进来的方法,就实现了替换 viewDidLoad 方法为JS代码里的实现,同时为 UIViewController 新增了个方法 -ORIGViewDidLoad...后来挺多人比较关注这个问题,不能新增方法导致 action-target 模式无法用,我也开始想有没有更好的方法实现添加方法。...后来的解决方案是所有类型都用 id 表示,因为反正新增的方法都是 JS 在用(Protocol定义的方法除外),不如新增的方法返回值和参数全统一成 id 类型,这样就不用传类型了。

    3.6K80

    iOS14开发-入门知识

    所有放在界面上的 UI 控件都放在 UIViewController 的 UIView 之上,在 UIViewController 的代码中可以通过self.view属性获取它。...注意代码的书写位置,往往有人由于书写的位置不对导致代码报错。 @IBOutlet与@IBAction 引入 如何在代码中获取 Storyboard 中的自定义 UIView?...有没有更加友好、更加直观、更加便捷、更加高效的方法呢?答案是肯定的,那就是 @IBOutlet 与 @IBAction。 @IBOutlet 写于类中的属性。...与 Storyboard 中的 UIView 建立联系。 此时的属性就代表 Storyboard 中的 UIView 所有的 UI 控件都可以拖拽 @IBOutlet。...@IBAction 写于类中的方法。 与 Storyboard 中的 UIView 产生的事件建立联系。 当相应的事件发生时,方法就会被调用。

    2.9K40

    Container ViewController自定义转场控制器。

    经同事指导,最后找到Container View Controllers Quickstart,才发现一种新的转场实现方式。下面就动手实践一下。...第一步,创建项目: 创建一个空的demo project,怎么创建我就不说了。其他任何选项都不用修改,run下应该有个黑色的空白页面。...在`viewcontroller.m中引入,并添加如下属性方法: // 记录当前是哪个vc @property (nonatomic, strong) UIViewController *currentVC...相对应的右侧弹出的实现方式一样,只是把Frame更改下,就可以实现从右侧弹出的效果。具体代码就不贴了。 如果想回到主页,只用写个移除self.currentVC的方法,调用下就可以了。...到这,大致的实现逻辑都已经讲明了。只是代码有点乱。如果要再项目中使用,第一个ViewController就相当于我们的主页,然后再主页里写这些逻辑就会把主页弄的很臃肿。

    71610

    Swift-MVVM 简单演练(一)

    方法不能方便的满足我们创建所需的leftBarButtonItem或rightBarButtonItem 如果自定义创建需要些好几行代码 而这些代码又可能在很多地方用到,所以尽量抽取个便利构造函数 一般自定义...ftBarButtonItem时候可能会写如下代码 最讨厌的就是btn.sizeToFit()这句,如果不加,rightBarButtonItem就显示不出来 如果封装起来,就再也不用考虑这问题了 let...那么,就可以不对原方法造成侵害,不影响原方法的调用。 但是,objective-c就没有这么友好,如果在原方法上增加参数,那么之前调用过此方法的地方,就会全部报错。...---- 添加下拉刷新控件 在基类控制器中定义下拉刷新控件,这样就不用每个子控制器页面单独设置了 给refreshControl添加监听方法,监听refreshControl的valueChange事件...代理的合核心是解耦,当一个控件可以不停的被复用的时候就选择代理,比如TableViewDelegate中的didSelectRowAt indexPath:该方法是可以在任何地方只要创建TableView

    10.3K51

    WWDC2016 Session笔记 - iOS 10  推送Notification新特性

    如果推送中包含了这些多媒体信息,可以使用户不用打开app,不用下载就可以快速浏览到内容。...通过以上的设置,我们就能在推送中看到丰富的媒体信息了。用户并不需要去打开app,也不用去点击下载。...text = notification.request.content.body } }复制代码 我们会发现,这个ViewController是UIViewController的子类,其实就是一个很普通的...但是还有一种情况,当用户点击了按钮,希望接受一些日历上的邀请,我们需要把这个操作即时的展示在我们自定义的UI上,这是我们就只能用Notification content extension来处理这些用户点击事件了...不用这个方法的时候就可以不声明出来。

    88420

    如何优雅的动态修改app 图标

    在iOS 10.3之后,苹果官方提供了相关的API来实现这个功能,主要是下面这几个方法: @interface UIApplication (UIAlternateApplicationIcons)...完成后的操作将会在任意的后台队列中异步执行; 如果需要更改UI,请确保在主队列中执行. - (void)setAlternateIconName:(nullable NSString *)alternateIconName...不能放在 Assets.xcassets 里,但是正常的主icon还是可以在这里设置的,也可以按下面的方法来设置。...这里的Primary Icon是设置app的主icon,可以在这里的Icon files数组内添加,有多个的话,依次添加,也可以这里不用填写,直接在Assets.xcassets 里配置; 在 Icon...3,编写代码 配置完成后,代码部分就比较简单了: - (void)changeAppIconWithName:(NSString *)iconName { if (!

    1.5K20

    聊聊程序设计思想之面向切面编程AOP

    主要意图 将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离, 我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码...而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。 实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。...这样做的好处是降低了代码的复杂程度,使类可重用。 但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。...那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢? 这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。...第2版 同样有个问题,我虽然不用每次都copy代码了,但是,每个接口总得要调用这个方法吧。 于是就有了切面的概念,我将方法注入到接口调用的某个地方(切点)。

    97120

    iOS架构入门 - MVC模式实例演示

    image.png MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。...controller就行,因为View 写在 Controller里面,不用去别的地方找,就这里有; 比如一个View,里面有一张图片,图片依赖于网络资源,这样写的好处,可以直接让 View 在 Controller...不用洗脑,给自己一个大耳刮子让自己清醒清醒,这iOS的Controller就算是UIViewController,也没看到M啊,没有Model。...,比如这里的MNBaseDatas,如之前我们举例的DemoModel就无需声明 @interface DemoModel : MNBaseDatas /**继承自MNBaseDatas,父类有的就可以不用声明...,所以Controller中的tableView代码也不会多。

    1.3K00

    iOS 面向协议方式封装空白页功能

    但是每个界面都写一堆与DZNEmptyDataSetDelegate,DZNEmptyDataSetSource相关的代码就不太好,那一般情况下自然的就会采用继承的方式来避免。...或者collectionView都是写在控制器里,那我们面向的类就规定为UIViewController,或许也有人写在UIView里,不过这里先按UIViewController来写吧 // MARK...要明白这里的self指的是UIViewController,考虑到UIView的可能,这里我就让万物对象之父NSObject来遵守,并实现对应的数据源方法和代理方法 extension NSObject...有没有发现?,非常地恰巧,我们定义的方法lxf_EmptyDataSet需要外界将UIScrollView传递进来,在DZNEmptyDataSet的数据源方法和代理方法也有scrollView。...' 创建这个库的目的是为了通过协议的方式来方便快捷地实现一些的实用功能,目前功能不多,不过往后会逐渐增加,或许你有什么想实现的功能也可以提出来,喜欢的就给个Star鼓励下我吧 ?

    1.5K50

    iOS开发——Core Graphics绘图

    我们在搭建UI界面时,有很多时候,我们会用到iOS自带的绘图功能来完成一些界面的效果,很常用也很方便。今天我们在这里就一起讨论一下iOS的绘图功能。...iOS常见的图形绘制 画线 画圆、圆弧、贝塞尔曲线 画矩形、椭圆形、多边形 绘制图片 绘制文字 ---- iOS绘图基础 在绘图之前,我们先来了解一下几个基本的概念 context:上下文,ios绘图的方法都需要传一个上下文...CGContextFillRects //填充指定的一些矩形 CGContextFillEllipseInRect //填充指定矩形中的椭圆 常见的图形绘制 准备工作 新建一个文件...第一个方法我写的比较详细,写了使用path的方式和直接画线的方式。...推荐使用path的方式画线。 另外,第一个方法也写了移动笔触画线和用点集合画线。后面方法只会涉及其中一种,因为方法都比较类似。

    2.5K20

    看完这本攻略,Canvas新手小白也可以创建惊人特效

    这里我们可以创建一个绘制网格的方法,然后每次render的时候调用,这样就可以对图形的定位有一个直观的感受了。再也不用抓瞎。 首先我们要计算好网格的数量,将所有计算好的网线放入一个数组中。...计算并保存好信息之后,我们就要开始画线了。...closePath就是结束的意思,一切回到最初开始的地方,就是最先开始的那个点。lineTo就是画线的意思,两个点之间画一条直线。...当然不行,你可以说开始就开始,但不能说结束就结束!closePath最大的作用就是连接路径最后一个点和路径最开始的点。 ?...Canvas的像素点 首先就是像素的问题,大家有没有遇到过Canvas模糊的问题,尤其是手机,这个现象尤为明显。那么有没有解决方案呢?答案是当然有!而且并不复杂,一个属性就可以搞定!

    1K30

    iOS初步集成极光推送后你还要做这些事

    ,你有必要判断当前控制器是否可以push过去,即有没有导航栏,如果没有则不能push,当然也可以像我这样先跳转到个人中心,保证有导航栏,但是这样的处理也许不适用你的app....自定义消息,这个比较特殊,它必须是在app正在前台的时候才能收到消息,收到消息的位置而且不在代理中,而是在一个通知中。 ? 当注册极光后可以加入下面代码。注册一个通知。...通知一般不是广播式的,有时候需要针对不同用户群体或者个体发送通知,例如优惠券等。极光提供了几种区分用户的方法,在Web中我们可以看到 ?...现在有这个场景:我想给我所有的注册用户推送消息,没注册的不想推。 这时候,你需要在极光登录成功(非常重要,否则你可能出现注册别名无效的情况)的通知方法中向极光服务器注册Alias。...; } } 我把以上方法独立出来。方法都有注释,不再讲解。那么,这时候我仅仅需要在合适的位置调用这些方法即可! 例如。

    2.8K50

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

    选择器:表示消息或方法名称的一种特殊方式,表示为类型SEL。选择器本质上就是不透明的字符串,它们被管理,因此可以使用简单的指针相等来比较它们,从而提高速度。...1.1 方法与消息发送 消息在OC中方法调用是一个消息发送的过程。OC方法最终被生成为C函数,并带有一些额外的参数。这个C函数objc_msgSend就负责消息发送。...如果上面两步都通过了,就开始查找这个类的实现IMP,先从cache里查找,如果找到了就运行对应的函数去执行相应的代码。 如果cache中没有找到就找类的方法列表中是否有对应的方法。...换句话说,无论何时发送未知消息,它​​都会以一个很好的包发送到您的代码中,此时您可以随心所欲地执行任何操作。 1.3 OC的方法本质 OC中的方法默认被隐藏了两个参数:self和_cmd。...例如:我们可以为了避免直接闪退,可以当消息没法处理时在这个方法中给用户一个提示,也不失为一种友好的用户体验。 其中,参数invocation是从哪来的?

    2.1K11
    领券