Tag: 实例

核心动画示例

什么核心动画可以帮助您: 高帧率和流畅的动画效果,而不会给CPU造成负担,也不会降低应用程序的运行速度。 对应用程序的动画进行更细粒度的控制。 UIView样式较高,例如拐角半径,阴影… 您可以下载最终项目,以在阅读本教程时了解更多信息 核心动画管理您应用的内容 核心动画本身不是绘图系统。 它是用于在硬件中合成和处理应用程序内容的基础结构。 该基础结构的核心是图层对象 ,您可以使用这些对象来管理和操作内容。 图层将您的内容捕获到位图中,图形硬件可以轻松地对其进行操作。 在大多数应用程序中,图层用作管理视图内容的一种方式,但是您也可以根据需要创建独立的图层。 您可以通过调用视图的layer属性来访问此layer对象。 以下示例通过更改视图图层的背景色来更改视图的背景色: 您还需要将UIColor转换为CGColor以获得图层的backgroundColor属性值 可以将层组织到层次结构中 可以按层次排列图层以创建父子关系。 层的排列以类似于视图的方式影响它们管理的视觉内容。 附加到视图的一组图层的层次结构反映了相应的视图层次结构。 您还可以将独立图层添加到图层层次结构中,以将应用程序的视觉内容扩展到视图之外。 我们将查看以下示例。 我们将创建一个新层并将其添加到主要视图层: 图层支持角半径 您可以通过在图层上添加圆角半径来为图层创建圆角矩形效果。 要将角半径应用到图层,请为该图层的cornerRadius属性指定一个值。 您指定的半径值以磅为单位测量,并在显示之前应用于图层的所有四个角。 图层支持内置阴影 CALayer类包含几个用于配置阴影效果的属性。 阴影使图层看起来像是漂浮在其基础内容之上,从而增加了图层的深度。 您可以控制阴影的颜色,相对于图层内容的位置,不透明度和形状。 动画化对图层属性的简单更改 您可以根据需要隐式或显式执行简单的动画。 隐式动画使用默认的时间和动画属性执行动画,而显式动画需要您自己使用动画对象配置这些属性。 因此,隐式动画非常适合您希望无需大量代码即可进行更改且默认计时适合您的情况。 要使用动画对象显式进行相同的更改,请创建一个CABasicAnimation对象,然后使用该对象配置动画参数。 在将动画添加到图层之前,可以设置动画的开始和结束值,更改持续时间或更改任何其他动画参数。 下面的示例演示如何使用动画对象淡出图层。 创建对象时,可以为要设置动画的属性指定关键路径,然后设置动画参数。 要执行动画,请使用addAnimation:forKey:方法将其添加到要设置动画的图层中。 使用关键帧动画更改图层属性 基于属性的动画将属性从开始值更改为结束值,而CAKeyframeAnimation对象使您可以以线性或非线性方式对一组目标值进行动画处理。 关键帧动画由一组目标数据值和应达到每个值的时间组成。 在最简单的配置中,您可以使用数组指定值和时间。 对于图层位置的更改,您还可以使更改遵循路径。 动画对象采用您指定的关键帧,并通过在给定的时间段内从一个值插入下一个值来构建动画。 以下示例显示了图层的position属性的5秒钟动画。 对该位置进行动画处理以遵循使用CGPath数据类型指定的路径。 指定关键帧值 关键帧值是关键帧动画中最重要的部分。 这些值定义了动画执行过程中的行为。 指定关键帧值的主要方法是作为对象数组。 放入数组的内容取决于属性所需的数据类型。 对于采用CGRect属性(例如边界和框架属性), NSValue每个矩形包装在NSValue对象中。 对于图层的transform属性,将每个CATransform3D矩阵包装在NSValue对象中。 […]

Swift中的实例属性与参数

前几天,我重构了代码。 我有 扩展MainController:TabBarViewDelegate {func buttonDidPress索引:Int){ 让initialIndex = tabBarView.selectedIndex 让WholeAppContentView = updateWholeAppContentView() view.addSubview(wholeAppContentView) } } 委托方法看起来不正确,因为很难区分所需的委托方法还是实例方法。 它也缺少一个主题。 我喜欢这个API设计后的文章,您可以阅读Rule 19: Always say who’s talking 这是一条简单的规则,同样容易犯错误。 在您的委托方法中,始终将发送方作为参数传递。 总是。 即使是单身人士。 即使对于您无法想象的事物,也可能会同时使用多次。 没有例外。 因此,我重构了代表并遵守了该代表。 扩展MainController:TabBarViewDelegate {func tabBarView(_ view:TabBarView,buttonDidPress index:Int){ 让initialIndex = tabBarView.selectedIndex 让WholeAppContentView = updateWholeAppContentView() view.addSubview(wholeAppContentView)//这是罪魁祸首 } } 即使MainController.swift只有1行更改,整个UI也会中断,因为所有视图都已添加到选项卡栏中。 range。 不久之后,我就记得如果parameter具有相同的名称,则该parameter优先于instance property 。 因此,在这种情况下,编译器会在没有警告的情况下假设您正在处理TabBarView视图 这就是为什么您经常使用self来消除歧义的原因。 struct用户:可编码,可平等{ 让firstName:字符串 let lastName:String init(firstName:String,lastName:String){ […]