文档章节

iOS多点触控与手势识别

Ethan-GOGO
 Ethan-GOGO
发布于 2015/08/26 13:20
字数 866
阅读 442
收藏 4

0 解析关于手势操作事件

1>UI时间分类

(1)touch:各种手势

(2)motion:例如到传感器,例如摇晃

(3)Remote control:利用外部设备,例如插入耳机

2>Touch事件阶段

touch begin --> touch move --> touch end --> touch cancel

多指手势流程:

3>Recognize UIView ViewController的关系

 

点击-UITapGestureRecognizer

    override func viewDidLoad() {
        super.viewDidLoad()
               
        let rect=CGRect(x:80,y:200,width:200,height:200);
        var view1 = UIView(frame: rect)
        view1.backgroundColor = UIColor.redColor()
        self.view.addSubview(view1)
        
        //1,建立手势识别器
        var gesture = UITapGestureRecognizer(target: self, action: "viewAction:")
#warning 如果想要识别器能够识别多种触控,例如1点和2点,那就要建立2个UITapGestureRecognizer
        gesture.numberOfTapsRequired = 2    //点击次数
       // gesture.numberOfTouchesRequired = 2 //多点触摸
        
        //2,关联识别器到视图
        view1.addGestureRecognizer(gesture)
        
    }
    //3,手势引用的动作
    func viewAction(sender:UITapGestureRecognizer){
        //获得点击处的位置
        var point:CGPoint = sender.locationInView(self.view)
        println("\(point)")
        println("clicked")
    }


放大缩放UIPinchGestureRecognizer

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //1,建立手势识别器
        var gesture = UIPinchGestureRecognizer(target: self, action: "viewAction:")
        
        //2,关联识别器到视图
        view1.addGestureRecognizer(gesture)
        
    }
    //3,手势引用的动作
    func viewAction(sender:UIPinchGestureRecognizer){
        
        var _height = view1.bounds.height
        var _width  = view1.bounds.width
        
       view1.bounds.size = CGSize(width: _width * sender.scale,
                                        height: _height * sender.scale)
    }


旋转UIRotationGestureRecognizer

  override func viewDidLoad() {
        super.viewDidLoad()
        
        //1,建立手势识别器
        var gesture = UIRotationGestureRecognizer(target: self, action: "viewAction:")
        
        //2,关联识别器到视图
        view1.addGestureRecognizer(gesture)
        
    }
    //3,手势引用的动作
    func viewAction(sender:UIRotationGestureRecognizer){
        
      view1.transform = CGAffineTransformMakeRotation(sender.rotation)
    }


4 滑动UISwipeGestureRecognizer

 var offsetX:CGFloat = 0.0
  override func viewDidLoad() {
        super.viewDidLoad()
        
        //1,建立手势识别器
        var gesture = UISwipeGestureRecognizer(target: self, action: "viewAction:")
         //设置多指
        gesture.numberOfTouchesRequired = 2;
        //2,关联识别器到视图
        view1.UISwipeGestureRecognizer(gesture)
        
    }
    //3,手势引用的动作
    func viewAction(sender:UISwipeGestureRecognizer){
        
        offsetX += 20.0
        //方向属性
        if(sender.direction == UISwipeGestureRecognizerDirection.Right){
            
            view1.transform = CGAffineTransformMakeTranslation(offsetX, 0)
        }
    }


5  平移UIPanGestureRecognizer

  override func viewDidLoad() {
        super.viewDidLoad()
        
        var gesture = UIPanGestureRecognizer(target: self, action: "view1Tap:")
        
        //支持的多指范围
        gesture.minimumNumberOfTouches = 1;
        gesture.maximumNumberOfTouches = 2;
        
        view1.addGestureRecognizer(gesture)
    }
    //3,手势引用的动作
    func viewAction(sender:UIPanGestureRecognizer){
        
        //相对于view1视图偏移的位置
        var _transX = sender.translationInView(view1).x
        var _transY = sender.translationInView(view1).y
        
        view1.transform = CGAffineTransformMakeTranslation(_transX, _transY)
    }


长按UILongPressGestureRecognizer

  override func viewDidLoad() {
        super.viewDidLoad()
        
        var gesture = UILongPressGestureRecognizer(target: self, action: "view1Tap:")
        
        //需要的点数和点击次数
       // gesture.numberOfTouchesRequired
       // gesture.numberOfTapsRequired
        
        //最短长按时间
        gesture.minimumPressDuration = 1
        
        //运行移动的点数,在这个范围内不发生动作。默认是10
        gesture.allowableMovement = 10
        
        view1.addGestureRecognizer(gesture)
    }
    //3,手势引用的动作
    func viewAction(sender:UILongPressGestureRecognizer){
        
        UIAlertView(title: "longpress", message: "你长按了", delegate: self, cancelButtonTitle: "确定").show()
        
    }
    
    //2.获取手势的view的坐标点
        CGPoint location = [recognizer locationInView:recognizer.view];
      
    //3.判断点是否在rect范围
    BOOL isyes = CGRectContainsPoint(btn.frame, location);


UIScreenEdgePanGestureRecognizer

class UIScreenEdgePanGestureRecognizer : UIPanGestureRecognizer {
    var edges: UIRectEdge //< The edges on which this gesture recognizes, relative to the current interface orientation
}
是pan的子类,从边缘出来


8 自定义手势

//
//  UICustomGestureRecognizer.swift
//  ttt
//
//  Created by ling on 15/8/26.
//  Copyright (c) 2015年 ling. All rights reserved.
//

import UIKit
import UIKit.UIGestureRecognizerSubclass


class UICustomGestureRecognizer: UIGestureRecognizer {
   
    
    var leftTop = false
    var rightBttom = false
    
    //初始化
    override init(target: AnyObject, action: Selector) {
       super.init(target: target, action: action)
    }
    
    
    override func touchesBegan(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        return
    }
    
    override func touchesMoved(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        
        var myTouch = (touches as NSSet).anyObject() as! UITouch
        var myLocation = myTouch.locationInView(self.view)
        
        if(myLocation.x < 10 && myLocation.y < 10){
            leftTop = true;
        }
        
        if((myLocation.x + 10) > self.view?.bounds.width && (myLocation.y + 10) > self.view?.bounds.height){
            rightBttom = true
        }
        
        if(leftTop && rightBttom){
            self.state = UIGestureRecognizerState.Ended
        }
        
        println("\(myLocation)")
        
    }
    
    override func touchesEnded(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        
        self.reset()
        
    }
    
    override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        return
    }
    
}



//
//  UICustomGestureRecognizer.swift
//  ttt
//
//  Created by ling on 15/8/26.
//  Copyright (c) 2015年 ling. All rights reserved.
//

import UIKit
import UIKit.UIGestureRecognizerSubclass


class UICustomGestureRecognizer: UIGestureRecognizer {
   
    
    var leftTop = false
    var rightBttom = false
    
    //初始化
    override init(target: AnyObject, action: Selector) {
       super.init(target: target, action: action)
    }
    
    
    override func touchesBegan(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        return
    }
    
    override func touchesMoved(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        
        var myTouch = (touches as NSSet).anyObject() as! UITouch
        var myLocation = myTouch.locationInView(self.view)
        
        if(myLocation.x < 10 && myLocation.y < 10){
            leftTop = true;
        }
        
        if((myLocation.x + 10) > self.view?.bounds.width && (myLocation.y + 10) > self.view?.bounds.height){
            rightBttom = true
        }
        
        if(leftTop && rightBttom){
            self.state = UIGestureRecognizerState.Ended
        }
        
        println("\(myLocation)")
        
    }
    
    override func touchesEnded(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        
        self.reset()
        
    }
    
    override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent!) {
        return
    }
    
}


© 著作权归作者所有

Ethan-GOGO
粉丝 13
博文 174
码字总数 82033
作品 0
广州
私信 提问
微软发布Android和iOS版Windows远程桌面应用

在Android设备上显示的Windows远程桌面 微软昨天不仅发布了找回“开始”按钮的Windows8.1,而且还发布了面向Android和iOS平台的Windows远程桌面应用,让用户通 过Android和iOS智能手机或者平...

oschina
2013/10/19
6.4K
16
Swift 如何实现手势识别

在这次IOS应用开发教程中,我们打算实现手势识别。正如你所知道的,IOS支持大量的手势操作,它们能提供了很好的应用控制和出色用户体验。 让我们开始吧! 首先需要在Xcode中创建一个新的Singl...

oschina
2014/07/26
11.3K
11
Visual Studio 2017 15.6 Preview 2 发布,增加新功能

Visual Studio 2017 15.6 预览版本 2 发布,这版本更新包括 macOS 环境配置,iOS WiFi 部署,在 Remoting iOS 模拟器中进行实时的 XAML 预览,等等。 自动 macOS 配置 在Windows上使用Visua...

周其
2018/01/11
1K
11
Kivy 1.6.0 发布,跨平台 Python 应用开发框架

Kivy 是一套 Python 下的跨平台快速应用开发框架,对于多点触控有着良好的支持。 Kivy 依据允许商业使用 LGPLv3 协议发布,支持 Linux, Windows, MacOSX, Android 和 iOS 平台,原生支持各个...

oschina
2013/05/07
1K
4
ArcGIS for iOS 开发系列(1) – 基本概念

1.1 iOS简介 2006年苹果公司发布了智能手机iPhone,卓越的外形设计和新颖的触摸式交互,令其迅速风靡全球,随后发布的平板电脑iPad同样也取得了巨大成功,二者所搭载的都是iOS智能移动操作系...

长平狐
2012/11/28
879
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
10
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
8
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部