教程:使用手势来拖动视图

教程:使用手势来拖动视图,第1张

概述作者:Arthur Knopper,原文链接,原文日期:2016-11-07 译者:Crystal Sun;校对:星夜暮晨;定稿:CMB iOS 的优势在于可以触摸和手势交互。在本节教程中,我们会展示一些借助拖曳手势识别器 (pan gesture recognizer) 来进行拖拽的自定义视图 (views),本节教程使用 Xcode 8 和 iOS 10。 打开 Xcode,创建一个 Sing

作者:Arthur Knopper,原文链接,原文日期:2016-11-07
译者:Crystal Sun;校对:星夜暮晨;定稿:CMB

iOS 的优势在于可以触摸和手势交互。在本节教程中,我们会展示一些借助拖曳手势识别器 (pan gesture recognizer) 来进行拖拽的自定义视图 (vIEws),本节教程使用 Xcode 8 和 iOS 10。

打开 Xcode,创建一个 Single VIEw Application。

点击 Next,product name 一栏填写 IOS10DraggingVIEwsTutorial,填写好 Organization name 和 Organization IDentifIEr,Language 选择 Swift,Devices 选择 iPhone。

首先,先创建随机出现在屏幕上的视图,菜单栏选择 file->New->file->iOS->Cocoa touch Class,创建类文件,命名为 MyVIEw,Subclass 选择 UIVIEw。

找到 MyVIEw.swift 文件,添加下列属性:

var lastLocation = CGPoint(x: 0,y: 0)

这个变量记录用户触摸点的最后位置。接下来实现 init 方法。

overrIDe init(frame: CGRect) {    super.init(frame: frame)            // 初始化代码    let panRecognizer = UIPanGestureRecognizer(target:self,action:#selector(MyVIEw.detectPan(_:)))    self.gestureRecognizers = [panRecognizer]            // 视图的颜色随机显示    let blueValue = CGfloat(Int(arc4random() % 255)) / 255.0    let greenValue = CGfloat(Int(arc4random() % 255)) / 255.0    let redValue = CGfloat(Int(arc4random() % 255)) / 255.0            self.backgroundcolor = UIcolor(red:redValue,green: greenValue,blue: blueValue,Alpha: 1.0)}required init?(coder aDecoder: NSCoder) {    fatalError("init(coder:) has not been implemented")}

首先给视图添加一个拖曳手势识别器 (pan gesture recognizer),这样就可以点击选中并拖拽视图到新的位置。接下来创建随机颜色,以作为视图的背景色。然后实现 detectPan 方法,这样在每次识别到手势后,都会调用 detectPan 方法。

func detectPan(_ recognizer:UIPanGestureRecognizer) {    let translation  = recognizer.translation(in: self.supervIEw)    self.center = CGPoint(x: lastLocation.x + translation.x,y: lastLocation.y + translation.y)}

translation 变量检测到新的坐标值之后,视图的中心将根据改变后的坐标值做出相应调整。当用户点击视图时,调用 touchesBegan:event 方法,下面就来实现此方法。

overrIDe func touchesBegan(_ touches: (Set<UItouch>!),with event: UIEvent!) {    // 把当前被选中的视图放到前面    self.supervIEw?.bringSubvIEw(toFront: self)          // 记住原来的位置    lastLocation = self.center}

选中某个视图后,这个视图会出现在其他视图的前面,其中心位置的坐标值就是 lastlocation 变量值。现在,自定义的视图差不多完成了,移植到视图控制器 (vIEw controller) 上吧。在 VIEwController.swift 文件中实现 vIEwDIDLoad 方法

overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()            let halfSizeOfVIEw = 25.0    let maxVIEws = 25    let insetSize = self.vIEw.bounds.insetBy(dx: CGfloat(Int(2 * halfSizeOfVIEw)),dy: CGfloat(Int(2 * halfSizeOfVIEw))).size            // 添加视图    for _ in 0..<maxVIEws {        let pointX = CGfloat(UInt(arc4random() % UInt32(UInt(insetSize.wIDth))))        let pointY = CGfloat(UInt(arc4random() % UInt32(UInt(insetSize.height))))                    let newVIEw = MyVIEw(frame: CGRect(x: pointX,y: pointY,wIDth: 50,height: 50))        self.vIEw.addSubvIEw(newVIEw)    }}

有 25 个 50x50 大小的视图随机地出现在主界面上,运行工程,点击并拖动一个视图,这个视图会一直在其他视图上面。

在 ioscreator 的 github 上可以下载到本节课程 IOS10DraggingVIEwsTutorial 的源代码。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

总结

以上是内存溢出为你收集整理的教程:使用手势来拖动视图全部内容,希望文章能够帮你解决教程:使用手势来拖动视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1068883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存