随笔分类 -  iOS

1
摘要:1. 方案调研 swift-syntax github - https://github.com/apple/swift-syntax 这是苹果官方的工具,Xcode工具包里有,可以扫描Swift源文件,生成AST树(抽象语法树) 用法也很简单,命令行输入 xcrun swiftc -fronten 阅读全文
posted @ 2022-12-28 16:12 rome753 阅读(752) 评论(0) 推荐(0) 编辑
摘要:UIViewController 的生命周期有个奇怪的地方,就是有页面加载的方法 viewDidLoad(),却没有页面销毁的方法。只有一个 deinit{},它代表的是对象的销毁。然而关闭页面时,对象不一定会销毁。 如果在deinit{}里面去释放资源,资源没释放导致内存泄漏,那么deinit{} 阅读全文
posted @ 2022-07-18 17:50 rome753 阅读(957) 评论(0) 推荐(0) 编辑
摘要:值类型在传递和赋值时将进行复制,而引用类型只会使用引用对象。 Swift中定义的很多类型都是值类型,如struct、enum以及所有的内建类型(Int、Bool、String、Array、Dictionary)都是值类型。class为引用类型。 以最常用的数组为例 值传递 A,B两个类各有一个Arr 阅读全文
posted @ 2022-07-18 17:49 rome753 阅读(142) 评论(0) 推荐(0) 编辑
摘要:新建一个iOS工程,系统会自动创建ViewController,并在Main.storyboard中引用它作为主页面。这是一个基本的ViewController,如果要改成带导航栏的UINavigationController或者其他的,就得更换。网上搜了一下,资料很乱,改的地方很多,而且有的生效, 阅读全文
posted @ 2022-07-18 17:49 rome753 阅读(691) 评论(0) 推荐(0) 编辑
摘要:offsetBy() 是移动矩形位置,大小不变。dx 和 dy 表示origin移动距离。 insetBy() 是缩小或放大矩形,中心点不变。dx 和 dy 表示矩形四边同时向中心点移动的距离。origin移动距离也是 dx 和 dy,宽高的变化是 -2dx 和 -2dy。 (lldb) po f 阅读全文
posted @ 2022-07-18 17:48 rome753 阅读(264) 评论(0) 推荐(0) 编辑
摘要:列表是最常用的UI组件,iOS中列表分为UITableView和UICollectionView。UITableView是普通的纵向滑动列表,UICollectionView相当于前者的升级版,可以实现横向滑动等复杂的布局,定义列表item的样式等。 列表的使用相对麻烦一点,除了要操作控件,还要操作 阅读全文
posted @ 2022-07-18 17:48 rome753 阅读(582) 评论(0) 推荐(0) 编辑
摘要:// 直接添加延时任务 DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { } // 初始化延时任务 var dispatchWorkItem = DispatchWorkItem { } // 添加延时任务 DispatchQueue.m 阅读全文
posted @ 2022-07-18 17:47 rome753 阅读(732) 评论(0) 推荐(0) 编辑
摘要:当前View里面有两个View,绿色的bigView和红色的smallView,smallView在bigView里面。现在让bigView执行一段移动动画,然后给bigView添加点击事件,发现点击事件无效。 因为iOS动画中的View点击事件无效。 原因是iOS里几乎所有的View动画是都基于l 阅读全文
posted @ 2022-07-18 17:47 rome753 阅读(234) 评论(0) 推荐(0) 编辑
摘要:两个UILabel放在同一行,需要设置它们的抗压缩和抗拉伸属性。 class MyView: UIView { lazy var leftLabel = UILabel() lazy var rightLabel = UILabel() override init(frame: CGRect) { 阅读全文
posted @ 2022-07-18 17:46 rome753 阅读(305) 评论(0) 推荐(0) 编辑
摘要:当前View里面有两个View,绿色的bigView和红色的smallView,smallView在bigView里面。现在要在当前View的touchesBegan方法判断点击位置是否在最里层的smallView里。 有多种方法可以判断。其实它们本质都是一样的,最重要的是转换参考系。 要想判断po 阅读全文
posted @ 2022-07-18 17:46 rome753 阅读(792) 评论(0) 推荐(0) 编辑
摘要:原来用GPUImage实现,采用的这篇博客介绍的方法,但是有两个比较严重的问题: App启动后第一次使用播放器时会造成主线程卡住1~5秒,越老的机型越长,第二次和以后就完全不卡,直到下次启动。这应该是GPUImage某处初始化造成的,我没有找到具体位置。 播放某些视频时,画面中亮白色的位置会出现“过 阅读全文
posted @ 2022-07-18 17:45 rome753 阅读(604) 评论(0) 推荐(0) 编辑
摘要:协议protocol一般用来做回调监听,当多个地方需要添加回调监听时,就要用Set集合来管理,Set中的元素需要实现Hashable方法,而协议protocol是不能实现Hashable方法的,会报如下错误。 Protocol 'MyProtocol' as a type cannot confor 阅读全文
posted @ 2022-07-18 17:45 rome753 阅读(134) 评论(0) 推荐(0) 编辑
摘要:通常使用多语言在Resource里配置Localizable文件,添加需要的语言即可。 使用String的扩展方法如下: 如果需要占位符,%d表示数字,%@表示字符串,用localizedWithArgs方法 func localized() -> String { return NSLocaliz 阅读全文
posted @ 2022-07-18 17:44 rome753 阅读(298) 评论(0) 推荐(0) 编辑
摘要:private var bgImageGaussDataDict:[Int:Data] = [:] var guassImageData = bgImageGaussDataDict[gauss] if guassImageData == nil { let image = bgImageOrigi 阅读全文
posted @ 2022-07-18 17:44 rome753 阅读(117) 评论(0) 推荐(0) 编辑
摘要:iOS 界面开发最重要的是ViewController和View,ViewController是View的控制器,也就是一般的页面,用来管理页面的生命周期(它相当于安卓里的Activity,两者很像,又有一些差异)。 ViewController的特点是它有好几种。一种最基本的UIViewContr 阅读全文
posted @ 2022-07-18 17:43 rome753 阅读(259) 评论(0) 推荐(0) 编辑
摘要:如果键盘弹起的时候,获得焦点也就是becomeFirstResponder的输入框位置会被键盘挡住,那么系统会自动将输入框所在的整体布局向上移动。这种移动不一定是我们想要的,如果想要更精准的控制,就需要在键盘弹起之前主动移动输入框到键盘上方,这样系统就不会自动移动整体布局了。 keyboardWil 阅读全文
posted @ 2022-07-18 17:43 rome753 阅读(252) 评论(0) 推荐(0) 编辑
摘要:let myView = UIView() myView.bounds = CGRect(x: 0, y: 0, width: 300, height: 100) myView.addGradientLayerWithCorner(cornerRadius: 20, lineWidth: 10, c 阅读全文
posted @ 2022-07-18 17:42 rome753 阅读(627) 评论(0) 推荐(0) 编辑
摘要:相比于安卓开发来说,iOS开发中最麻烦的事情就是手动计算高度了。 在UITableView或UICollectionView列表的item、header、footer中,如果列表项的高度不是固定的,那么就需要自己计算实际高度,然后通过tableView(_ tableView: UITableVie 阅读全文
posted @ 2022-07-18 17:42 rome753 阅读(2087) 评论(0) 推荐(0) 编辑
摘要:用 CAShapeLayer 和 UIBezierPath 贝塞尔曲线实现,每次进度变化时,重新初始化一个 CAShapeLayer 添加到当前 UIView 上。 import Foundation import UIKit class CircleProgressView: UIView { / 阅读全文
posted @ 2022-07-18 17:41 rome753 阅读(593) 评论(0) 推荐(0) 编辑
摘要:一般来说,在UIViewController里的UIView使用lazy var,可以确保在只第一次使用时创建。 但是如果在viewDidLoad()前访问这个View,那么这个View就会创建两次,说明Lazy var机制失效了。网上搜了一下,都是说Lazy var在多线程下会失效。然而我打印一下 阅读全文
posted @ 2022-07-18 17:37 rome753 阅读(77) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示