还可以在普通电脑上装一个黑苹果系统(不推荐),安装复杂且不稳定。 开发软件 iOS 使用 Xcode 工具进行开发。...Storyboard 中的界面与ViewController.swift之间的联系(一个界面与一个类文件关联)。...所有放在界面上的 UI 控件都放在 UIViewController 的 UIView 之上,在 UIViewController 的代码中可以通过self.view属性获取它。...hidden == true。 alpha <= 0.01。 没有设置背景色、没有设置内容。 可能是文字颜色和背景色一样。 UIView常见方法 addSubview:添加视图到父视图。...与 Storyboard 中的 UIView 产生的事件建立联系。 当相应的事件发生时,方法就会被调用。 只有继承自 UIControl 的 UI 控件可以拖拽 @IBAction。
基本视图 在Main.Storyboard中,我们已经提到ARSCNView默认放在视图控制器的顶部。但是,如果没有UIView作为基础,则仅限于您可以在用户界面上执行的操作。...现在,我们并排放置两个分屏,非常适合连接。在右侧,我们有ViewController.swift,在那里我们可以找到该出口的声明。...添加按钮 我们想在视图中添加一个按钮,用作在场景中添加模型的触发器。从对象库中,将UIButton拖动到场景视图的顶部。在“ 属性”检查器中,删除“ 按钮”标题并将图像设置为“ 按钮/添加”。...在“ 节点”检查器中,将x Euler Angle重置为0。 让我们再试一次。现在,我们的设备看起来更像是在房间里。 缩放模型 如果您选择了其他型号,您可能已经注意到尺寸不合适。...在ViewController.swift中,将一个新的类变量声明为一个节点数组,我们将其初始化为空。
UIView view.addSubview(testView) } 使用与 UIViewController 子类源文件关联的 xib Demo HomeViewController.swift...第4章 在 Interface Builder 中使用 Auto Layout ---- 在 IB 中使用 Auto Layout 的优缺点 设置约束十分简单 如果约束不恰当,IB 提供很好的实时反馈...IB 中设置 - 推荐 苹果原生 API - 最复杂,强烈不推荐 用 VFL (Visual Format Language) 设置约束 - 不推荐 第三方库(Masonry等)设置约束 - 代码设置最简单...用 External Object 重构 VC 只能在于 xib IB 中的关键字总结 Swift @IBAction @IBOutlet @IBDesignable @IBInspectable...IB 中,但是源文件必须是 UIView 或者 NSView 的子类。
接着看下写作环境: Swift 5, iOS 14, Xcode 12 下面就是正文了。 你已经在 iOS 应用程序上工作了一段时间,你认为你很聪明。 你以为你已经做到了,嗯?...视频本身来自嵌入在应用程序包中的 JSON 文件。 如果您好奇,您可以查看 Video.swift 以了解它们是如何获取的。...HLS 的工作原理是将视频分成 10 秒的块。 这些然后一次一个块地提供给客户端。 如果您的互联网连接速度较慢,您会发现视频开始播放的速度比使用 MP4 版本时快得多。...当您想对事物的工作方式进行非常具体的控制时,最好编写自己的视频视图。 让事情顺利进行是你的工作。...每次收到通知时,您都会知道播放器已进入下一个视频。 要在 Swift 中使用 KVO——比在 Objective-C 中好得多——你需要保留对观察者的引用。
在使用 Image 组件的时候,受到Image 组件的困扰: 图片的宽度在指定宽度的情况下是可以控制图片的宽度的,但是 如果我们想要图片的宽度与父视图的宽度一致 我们想要类似于 iOS 中 UIView...并且采用 absolute 然后设置 left right 这种方式,但是发现图片的宽度采用这种方式居然限制不了,图片有多大便显示多大,可能比父组件小,也可能超出父组件(没有设置 overflow: hidden...我不希望有那个控件不在自己控制之下,于是作为iOS(OC/Swift)的一名开发人员,便想起了封装一个iOS中图片填充方式的图片组件,图片的填充类型为: contentMode: React.PropTypes.oneOf...其他的填充类型也是按照iOS中的填充类型设置 iOS中 UIView -> contentMode 绝对可以满足你的各种图片填充类型,所以此图片封装组件也可以满足你各种图片布局 以下是实现方案: 将图片放置一个...View 上面,在 View onLayout 回调中,知道此 View 的width height,然后在需要将图片的宽度设置为父视图的宽度时候,直接设置图片的宽度为 width。
作者 | Daniels 初始化 在 iOS 里面,无论是 Objective-C 还是 Swift,类(结构体、枚举)的初始化都有一定的规则要求,只不过在 Objective-C 中会比较宽松,如果不按照规则也不会报错...所以当调用[[UIView alloc] init]时,-init里面必然调用了-initWithFrame: 当存在一个新的指定初始化器的时候,推荐在方法名后面加上NS_DESIGNATED_INITIALIZER...,在 Objective-C 中,子类会直接继承父类所有的初始化方法 Swift 在 Swift 中,初始化器的规则严格且复杂,目的就是为了使代码更加安全,如果不符合规则,会直接报错,常常会让刚接手 Swift...必须重写旧的定初始化器,在里面调用新的指定初始化器 • 在 Swift 中,初始化的时候需要保证类(结构体、枚举)的所有非可选类型属性都会有值 • 在 Swift 中,必须在初始化完成后才能调用实例属性...• 在 Swift 中,子类如果没有新创建一个指定初始化器,并且没有重写父类的指定初始化器,则会继承父类的指定初始化器和便利初始化器 • 在 Swift 中,子类如果新创建一个指定初始化器,或者重写了父类的某个指定初始化器
来一个简单的图说明一下 假设我们现在点击到了图中的E,hit-testing将进行如下步骤的检测(不包含重写hit-test并且返回非默认View的情况) 1、触摸点在ViewA内,所以检查ViewA...中Subviews的逆顺序; 2、如果View的同级别Subview中有重叠的部分,则优先检查顶部的Subview,如果顶部的Subview返回nil,再检查底部的Subview; 3、Hit-Test...iOS中很多类型的事件分发,都依赖于响应链;在响应链中,所有对象的基类都是UIResponder,也就是说所有能响应事件的类都是UIResponder的子类,UIApplication/ UIView/...我们需要在touchesBegan方法里面self.maskView.hidden = NO;然后在touchesEnded/ Cancelled里面self.maskView.hidden = YES...我们有时候会遇到一些问题,比如我们重写了motionEvents,但是我们不能收到摇一摇的回调,或者我们的UIMenuController老是不弹出,我们就需要检查一下,我们是否满足了如上所示的条件,而且要确保
SnapKit - 就是“snap”,--swift喜欢自动布局吗?当然喜欢!至少在storyboard中创建时会喜欢。...在代码中纯手工创建约束灰常痛苦,但幸运的是我们有了SnapKit,在板中用上它,你可以简单直观地编写约束了。...Cartography - Cartography是用来声明Swift中的Auto Layout,无需输入任何字符串就职设置自己Auto Layout的约束声明。...第二个Demo模拟了一个经典的FlowLayout,任意一个元素隐藏时,底下的元素需要自动“顶”上来,配合这个扩展,你可以在IB里连一连,选一选,不用一行代码就能搞定。...当前视图隐藏的时候也隐藏其autolayout的NSLayoutAttribute - 当前隐藏的时候也隐藏其autolayout的NSLayoutAttribute,从而不用大量的代码工作。
另外,有读者评论说使用方括号的形式是为了向下兼容 C 语言,我并不觉得中括号是唯一选择,C++ 不也兼容了 C 语言么?Swift 不也可以调用 C 函数么?...但是让其在执行前检查另一个 isCanceled 的变量,然后把这个变量的修改实现在另一个 block 方法中,如下所示: typedef void (^CancelableBlock)(); typedef...,有一个机制来定期检查外部的变量是否有变化,而要做到这一点,需要改 block 执行中的代码。...例如:队列中我们保存的是节点的数据结构,但是最终输出的时候,我们需要输出的是值,在代码中,我使用了 Swift 的函数式的链式调用,将嵌套数组中的元素类型做了一次变换,如下所示: let ans = result.map...但是也有人认为,ARC 也附带有运行期的一些机制来使 ARC 能够更好的工作,他们主要是指 weak 关键字。weak 变量能够在引用计数为 0 时被自动设置成 nil,显然是有运行时逻辑在工作的。
环境: Xcode:Xcode 8.2 Swift:swift3+ git 地址:https://github.com/TieShanWang/KKPopover pod 集成:pod 'KKPopover...' 【注意】pod 版本,swift 3 支持,以 3....可以看到当 sourceView(加号按钮) 在不同地方的时候,popover 自动更改方向、调整箭头方向、位置以适应不同的 sourceView 类说明 open class KKPopover: UIView...// 当 touchThrough 为 true 的时候,此字段不起作用 arrowDirection: UIPopoverArrowDirection /// 箭头方向 /// 当设置为 .any 时,..., sourceView: UIView) /// 根据 sourceView 展示在指定视图中 /// - Parameters: /// - view: 添加到的视图,不传则添加到 window
准备开始 在ViewController.swift 添加如下代码在viewDidLoad: let square = UIView(frame: CGRect(x: 100, y: 100,...增加重力效果 仍然在 ViewController.swift中,在viewDidLoad上方添加以下属性: var animtor: UIDynamicAnimator!...这个协议意味着动态与UIView不紧密耦合; 的确有另一个UIKit类不是视图,但仍然采用这个协议:UICollectionViewLayoutAttributes。...在viewDidLoad中,从square声明中删除let关键字,以便它使用新属性而不是局部变量: square = UIView(frame: CGRect(x: 100, y: 100, width...首先,它检查是否存在现有的快照行为并将其删除。 然后创建一个新的捕捉行为,将方块对齐到用户的触摸位置,并将其添加到动画制作工具中。 构建并运行应用程序。
本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~ 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程...LXFProtocolTool/FullScreenable' 一、配置 若项目支持横屏(Landscape)则跳过此配置步骤 若项目只支持竖屏(Portrait)的话需要在AppDelegate中实现如下方法...进入/退出 全屏后的回调 当switchFullScreen的调用者为UIView时,如果specifiedView为nil会自动填写,superView也是如此 switchFullScreen...方法不推荐直接使用,不过当遵守协议者为UIViewController时,可以通过使用默认参数来切换屏幕方向lxf.switchFullScreen() ?...lxf_FullScreenable_3 结语 到这里相关的说明已罗列完毕,有什么不清楚的可以下载Demo看看,或者在文章下方留言提问 LXFProtocolTool 主要是通过协议的方式来方便快捷地实现一些的实用功能
Swift 在很多方面对初学者都很友好,无论你是刚接触 Swift,还是刚接触编程。如果让初学者看上面的代码,他可能完全不知道那些数字的含义。...但是...为什么我们不直接去访问这个变量呢?...— Apple, CGGeometry Reference Documentation 这可能就是你不直接访问的原因吧,不过没关系,Swift 提供了简单的点语法访问来取代之前不那么完美的 API。...playground 中列举了很多相关细节,链接在文末。...+= 10 现在,你不仅可以直接修改 frame 中某一个变量的值,并且你也可以直接对 frame 包含的 origin 与 size 结构体重新赋值: let view = UIView(frame
BreakOutToRefresh - 一个下拉刷新打砖块的开源 Swift 库,能让用户在等待下拉刷新的时候边玩撞球游戏边等待。...SnapKit - 就是“snap”, --swift 喜欢自动布局吗?当然喜欢!至少在storyboard中创建时会喜欢。...在代码中纯手工创建约束灰常痛苦,但幸运的是我们有了SnapKit,在board中用上它,你可以简单直观地编写约束了。...Cartography - Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明。...第二个Demo模拟了一个经典的FlowLayout,任意一个元素隐藏时,底下的元素需要自动“顶”上来,配合这个扩展,你可以在IB里连一连,选一选,不用一行代码就能搞定。
保留Struct默认初始化方法同时添加自定义的初始化方法 Swift中的Struct都有个系统提供默认的包含所有成员遍量的init方法,如果我们添加自定义的init方法时,系统默认提供的就会消失,如果需要既可以保留系统默认的...编译时检测Swift的版本 使用#if swift()可以帮助我们对Swift的版本进行编译检测 #if swift(>=4.0) print("swift版本不低于4.0") #else...,帮助我们定位错误,但将App编译为发布(Release)版本时,所有的assert()语句都会被移除.也就是说assert()只工作在我们的代码开发调试(Debug)阶段.....serious: 严重, 系统工作在一个高度运转状态,最好缩减你的CPU/GPU或者IO操作等 .nominal: 正常 .fair: 合理 , 通常可以释放一些不可见的UI资源 let...(armv7)) // 这段代码只在真机中运行 #endif
然而有赞美业是有赞最早迁移到 Swift 的项目,迁移 Swift 后的代码,对 C++ 的兼容其实有一定的局限性,若过多使用 C++,在代码中也不能体现 Swift 的优雅性。...这里主要是因为 UIKit 绘制是需要通过 UIView 和它的 layer 进行的。而它里面具备着大量的属性以及方法,如果全部都需要接管的话,无疑会是一个工作量非常大的动作。...2.2 布局设计 由于我们的结构和 API 设计是基于 UIView 的方式,布局在设计中,其实也是一个 View,一个具备布局能力的视图容器。布局能力我们是可以进行抽象的,即布局的算法。...从上面代码来看,View 完全可以在声明期间操作,之后可以不持有任何的 view,通过父 View 的 subviews 进行持有管理,从而确保整个 view 树在一个根节点下挂载。...相比于用 UIView 直接声明结构的形式,View 的创建是非常重的,重复创建不现实。在UIView tree中,View是可变的,只需要把变化的操作放入动画 block 中即可由系统完成。
基本知识点: 0 UITouch 当每一个指尖在屏幕上触发一次触摸事件时,系统就会生成对应一个UITouch对象,用于记录当前触摸的状态,主要包含运动相位、位置、大小、运动、力度(iOS9)等数据;...(1)查找阶段: 先介绍UIView的两个方法: - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event; 该方法用于检查当前坐标是否落在当前...=NO & hidden!...=YES & alpha >0.01) 不满足直接返回nil; 通过pointInside:withEvent:方法,检查当前点击是否落在当前view中; 如果点击落在当前view中,遍历subView...,通常先发送事件给应用程序的主窗口(UIWindow); 主窗口会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的UIView来处理触摸事件,并将UITouch
不建议的写法 @interface UIView (Add) - (void)addCustomView:(CustomView *)customView; @end 尽量少在分类里面使用属性 假设我们分类有一个只读的字段...(Add) - (NSArray *)customViews { return @[customView1,customView2]; } @end 不建议的写法 @interface UIView...不推荐: if ([@42 isEqual:myValue]) { ... nil 和 BOOL 检查 推荐 if(name) { } if (isMyFriend) { } 不建议的写法...object : [self createObject]; 错误处理 有些方法通通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。...)写入垃圾值(garbage values),所以如果检查 error 的值可能导致错误 (甚至崩溃)。
所以在Swift5中,新增了一个枚举Result,使我们能够更简单、更清晰地处理复杂代码中的错误。...eat() -> Self } extension TestProtocol where Self : UIView{ } @objc关键字 在Swift中,很多地方都用到了@objc关键字,尤其是在一些混编项目中...那么在Swift中,哪些地方用到了这个关键字呢?...where关键字在Swift中非常强大,那么在Swift中哪些地方用到了这个关键字呢?...Apple给我们做好了桥接工作,不过,在OC项目中调用Swift,与在Swift项目中调用OC,处理的方式是不一样的。
执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码包装到一个代码块中。...但是须知:CATransition只针对图层,不针对视图。图层是Core Animation与每个UIView产生联系的工作层面。...重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果的。...我们有时候会遇到一些问题,比如我们重写了motionEvents,但是我们不能收到摇一摇的回调,或者我们的UIMenuController老是不弹出,我们就需要检查一下,我们是否满足了如上所示的条件,而且要确保...UITouch对象在触摸操作的过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch的内部信息。