首页
学习
活动
专区
工具
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是必须使用协议,因为编译时找不到这个方法

98300

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

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

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

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

    2.6K50

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

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

    7.5K43

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

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

    1.9K31

    JSPatch 实现原理详解

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

    3.5K80

    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

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

    魔术橡皮擦 大家好,我是麦芽香气,一个喜欢解决产品来解决需求开发者。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 值,那么实现出了我们像素画线和橡皮檫功能

    87730

    Container ViewController自定义转场控制器。

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

    70810

    Swift-MVVM 简单演练(一)

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

    10.3K51

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

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

    95820

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

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

    87220

    如何优雅动态修改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.4K20

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

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

    1.3K00

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

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

    1.4K50

    iOS开发——Core Graphics绘图

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

    2.5K20

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

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

    2.8K50

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

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

    99030

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

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

    2K11
    领券