Tag: 示例

iOS 11中拖放功能的简单示例

我们简要地看到了苹果几个月前在其WWDC中引入的拖放功能。 今天,我们将通过示例代码对功能进行更深入的了解。 我们将看到如何在视图和表视图中实现拖放功能。 创建一个新项目并添加2个选项View和TableView。 当用户选择“自定义视图”选项时,导航至CustomViewController并设计如下所示的UI。 在此屏幕中,我们将执行从一个imageView到另一个imageView的拖动,以及从一个textView文本到另一个textView的拖动。 首先,为imageView启用用户交互。 然后,我们需要使用DragInteraction委托为ImageView设置一个Drag交互。 仅在委托中,我们将指定要拖动的DragItem。 dragImageView.isUserInteractionEnabled = true dropImageView.isUserInteractionEnabled = true dragImageView.addInteraction(UIDragInteraction(delegate:self)) dragTextView.addInteraction(UIDragInteraction(delegate:self)) 准备好拖动对象后,将调用以下委托方法。 func dragInteraction(_交互:UIDragInteraction,itemsForBeginning会话:UIDragSession)-> [UIDragItem] 我们将拖动要拖动的imageview和textview,因此代码实现如下。 func dragInteraction(_交互:UIDragInteraction,itemsForBeginning会话:UIDragSession)-> [UIDragItem] {如果让textValue = interact.view为? UITextView {让provider = NSItemProvider(object:textValue.text!as NSString)let item = UIDragItem(itemProvider:provider)返回[item]}如果让imageView = interact.view为? UIImageView {保护let image = imageView.image else {return []} let provider = NSItemProvider(object:image)let item = UIDragItem(itemProvider:provider)return [item]} return […]

核心动画示例

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