• [Swift通天遁地]三、手势与图表-(2)监听手势事件自由拖动图像视图


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10210565.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示监听手势事件,使图片可以自由被拖动。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

    现在开始编写代码,实现监听手势事件自由拖动的图像视图。

     1 import UIKit
     2 
     3 class ViewController: UIViewController
     4 {
     5     //给类添加一个属性,作为被拖动的图像视图。
     6     var imageView : UIImageView!
     7     //添加一个属性,用于判断图片是否被按下。
     8     var isTouchInImageView : Bool = false
     9     
    10     override func viewDidLoad()
    11     {
    12         super.viewDidLoad()
    13         // Do any additional setup after loading the view, typically from a nib.
    14         
    15         //从项目中加载图片资源
    16         let image = UIImage(named: "Star")
    17         //使用图像视图显示加载的图片
    18         self.imageView = UIImageView(image: image)
    19         //将图像视图添加到根视图中
    20         self.view.addSubview(self.imageView)
    21     }
    22     
    23     //添加一个方法,用来监听手指按下时的事件
    24     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
    25     {
    26         //可能时多个手指同事按下,
    27         //这里获取第一个触摸对象。
    28         let touch = touches.first
    29         //获得触摸对象的坐标
    30         let touchPoint = touch?.location(in: self.view)
    31         
    32         //获得图像视图的显示区域
    33         let imageViewFrame = self.imageView.frame
    34         //获得图像显示区域的左上角的坐标
    35         let minX = imageViewFrame.origin.x
    36         let minY = imageViewFrame.origin.y
    37         //获得图像显示区域的右下角的坐标
    38         let maxX = minX + imageViewFrame.size.width
    39         let maxY = minY + imageViewFrame.size.height
    40         //将触摸位置的坐标,和左上角以及右下角的坐标进行比较,
    41         //从而判断触摸的位置是否位于图像的区域。
    42         if (touchPoint?.x)! >= minX && (touchPoint?.y)! <= maxX && (touchPoint?.y)! >= minY && (touchPoint?.y)! <= maxY
    43         {
    44             //当触摸在图像区域时,设置布尔属性的值为真,
    45             isTouchInImageView = true;
    46             //然后在控制台输出日志信息。
    47             print("You got a star.");
    48         }
    49     }
    50     
    51     //添加一个方法,用来监听手指移动时的事件
    52     override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
    53     {
    54         //判断当触摸位置不在图像区域时,不再执行后方的代码。
    55         if !isTouchInImageView
    56         {
    57             return;
    58         }
    59         //获取第一个触摸对象
    60         let touch = touches.first
    61         //获得触摸对象的坐标
    62         let touchPoint = touch?.location(in: self.view)
    63         //获得触摸对象在上一个位置时的坐标
    64         let touchPrePoint = touch?.previousLocation(in: self.view)
    65         //计算两个坐标之间的偏移距离
    66         let disX = (touchPoint?.x)! - (touchPrePoint?.x)!
    67         let disY = (touchPoint?.y)! - (touchPrePoint?.y)!
    68         
    69         //获得图像视图中心点的坐标
    70         var centerPoint = self.imageView.center
    71         //然后将该坐标和偏移距离相加,作为图像视图新的位置
    72         centerPoint.x += disX
    73         centerPoint.y += disY
    74         //刷新图像视图中心点的坐标
    75         self.imageView.center = centerPoint
    76     }
    77     
    78     //添加一个方法,用来监听手指移动结束时的事件。
    79     override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
    80     {
    81         //当手指移开屏幕时,设置布尔属性的值为假。
    82         isTouchInImageView = false;
    83     }
    84     
    85     override func didReceiveMemoryWarning() {
    86         super.didReceiveMemoryWarning()
    87         // Dispose of any resources that can be recreated.
    88     }
    89 }
  • 相关阅读:
    return false 和 return true
    前端异常采集
    Performance — 前端性能监控利器
    正则笔记-忘记就来看
    JS中的正则应用
    iconfont的使用
    canvas笔记1
    树莓派3B安装DeBian 64位系统及其安装私有云网盘----可道云
    台灯改造【智能台灯】
    单片机C语言中标志位的经典应用
  • 原文地址:https://www.cnblogs.com/strengthen/p/10210565.html
Copyright © 2020-2023  润新知