当前位置:网站首页>11. Gesture recognition
11. Gesture recognition
2022-06-11 05:46:00 【swindler.】
Gesture recognition
1、 Gesture type
iOS Provides 7 Three common gestures API, Include Tap( single click ),Long Press( Long press ),Pan( translation ),Swipe( slide ),Rotation( rotate ),Pinch( The closing and opening of fingers ), and Screen Edge Pan( Screen edge pan )
2、 Gesture recognizer
stay iOS There are two ways to recognize gestures on the device : Use gesture recognizer (UIGestureRecognizer) And touch events (UITouch)
Gesture recognizer is an abstract class , But it has seven concrete classes :
- UITapGestureRecognizer
- UIPinchGestureRecognizer
- UIRotationGestureRecognizer
- UISwipeGestureRecognizer
- UIPanGestureRecognizer
- UILongPressGestureRecognizer
- UIScreenEdgePanGestureRecognizer
If these seven gesture recognizers can not meet the requirements , You can also inherit directly UIGestureRecognizer Realize your own special gesture recognition .
3、 Seven gesture code examples
1.Tap
import UIKit
class ViewController: UIViewController {
// Set up flag
var flag = false
var imagegirl : UIImageView!
var imagegirl1 : UIImage!
var imagegirl2 : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let imageWidth:CGFloat = 90
let imageHeight:CGFloat = 150
let imageTopView:CGFloat = 300
self.imagegirl = UIImageView(frame: CGRect(x: (screen.size.width - imageWidth)/2, y: imageTopView, width: imageWidth, height: imageHeight))
// Set up imagegirl1 and 2 Properties of , And set the initial picture to girl_01
self.imagegirl1 = UIImage(named: "girl_01")
self.imagegirl2 = UIImage(named: "girl_02")
self.imagegirl.image = self.imagegirl1
// Add parent view
self.view.addSubview(self.imagegirl)
// Create a gesture recognizer
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(foundTap(_:)))
// take Tap The gesture recognizer is associated with iamgegirl On
self.imagegirl.addGestureRecognizer(tapRecognizer)
self.imagegirl.isUserInteractionEnabled = true
}
@objc func foundTap(_ sender:AnyObject){
print("Tap…")
if flag {
self.imagegirl.image = imagegirl2
flag = false
}else{
self.imagegirl.image = imagegirl1
flag = true
}
}
}
2.Long Press
import UIKit
class ViewController: UIViewController {
// Set up flag
var flag = false
var imagegirl : UIImageView!
var imagegirl1 : UIImage!
var imagegirl2 : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let imageWidth:CGFloat = 90
let imageHeight:CGFloat = 150
let imageTopView:CGFloat = 300
self.imagegirl = UIImageView(frame: CGRect(x: (screen.size.width - imageWidth)/2, y: imageTopView, width: imageWidth, height: imageHeight))
// Set up imagegirl1 and 2 Properties of , And set the initial picture to girl_01
self.imagegirl1 = UIImage(named: "girl_01")
self.imagegirl2 = UIImage(named: "girl_02")
self.imagegirl.image = self.imagegirl1
// Add parent view
self.view.addSubview(self.imagegirl)
// Create a gesture recognizer
let recognizer = UILongPressGestureRecognizer(target: self, action: #selector(foundLongPress(_:)))
recognizer.allowableMovement = 100.0
recognizer.minimumPressDuration = 2.0
// take Tap The gesture recognizer is associated with iamgegirl On
self.imagegirl.addGestureRecognizer(recognizer)
self.imagegirl.isUserInteractionEnabled = true
}
@objc func foundLongPress(_ sender:UITapGestureRecognizer){
print(" Long press state= ",sender.state.rawValue)
if sender.state == .began{
// The gesture begins
self.imagegirl.image = imagegirl2
flag = false
}else{
self.imagegirl.image = imagegirl1
flag = true
}
}
}
3.Pan
import UIKit
class ViewController: UIViewController {
// Set up flag
var flag = false
var imagegirl : UIImageView!
var imagegirl1 : UIImage!
var imagegirl2 : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let imageWidth:CGFloat = 90
let imageHeight:CGFloat = 150
let imageTopView:CGFloat = 300
self.imagegirl = UIImageView(frame: CGRect(x: (screen.size.width - imageWidth)/2, y: imageTopView, width: imageWidth, height: imageHeight))
// Set up imagegirl1 and 2 Properties of , And set the initial picture to girl_01
self.imagegirl1 = UIImage(named: "girl_01")
self.imagegirl2 = UIImage(named: "girl_02")
self.imagegirl.image = self.imagegirl1
// Add parent view
self.view.addSubview(self.imagegirl)
// Create a gesture recognizer
let recognizer = UIPanGestureRecognizer(target: self, action: #selector(foundPan(_:)))
// Set the number of contacts in min max format
recognizer.minimumNumberOfTouches = 1
recognizer.maximumNumberOfTouches = 1
// take Tap The gesture recognizer is associated with iamgegirl On
self.imagegirl.addGestureRecognizer(recognizer)
self.imagegirl.isUserInteractionEnabled = true
}
@objc func foundPan(_ sender:UIPanGestureRecognizer){
print(" translation state= ",sender.state.rawValue)
if sender.state != .ended {
// Return contact at imageView Coordinates in the parent view
let location = sender.location(in: sender.view?.superview)
// Take the contact coordinates as imageView New center point location . Constantly changing imageView The location of , You will see the translation effect
sender.view?.center = location
}
}
}
4、Swipe
import UIKit
class ViewController: UIViewController {
// Set up flag
var flag = false
/* var imagegirl : UIImageView! var imagegirl1 : UIImage! var imagegirl2 : UIImage! */
var label:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let labelWidth:CGFloat = 100
let labelHeight:CGFloat = 100
let labelTopView:CGFloat = 270
self.label = UILabel(frame: CGRect(x: (screen.size.width - labelWidth)/2, y: labelTopView, width: labelWidth, height: labelHeight))
self.label.text = "Swipe gesture "
self.label.textColor = .white
self.label.textAlignment = .center
self.view.addSubview(self.label)
// Create four swipe Gesture recognizer
let directions:[UISwipeGestureRecognizer.Direction] = [.left,.right,.up,.down]
for direction in directions {
// Create a gesture recognizer
let recognizer = UISwipeGestureRecognizer(target: self, action: #selector(foundSwipe(_:)))
recognizer.direction = direction
// Associate a gesture recognizer to View On
self.view.addGestureRecognizer(recognizer)
}
self.view.isUserInteractionEnabled = true
}
@objc func foundSwipe(_ sender:UISwipeGestureRecognizer){
print(" slide direction= ",sender.state.rawValue)
switch sender.direction {
case .down:
self.label.text = " Decline in "
case .up:
self.label.text = " Up slide "
case .left:
self.label.text = " Left slide "
case .right:
self.label.text = " Right slip "
default:
self.label.text = " Unknown "
}
}
}
5.Rotation
import UIKit
class ViewController: UIViewController {
var imagegirl : UIImageView!
var imagegirl1 : UIImage!
// Used to save the last rotation angle
var rotationAngleInRadians:CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let imageWidth:CGFloat = 100
let imageHeight:CGFloat = 150
let imageTopView:CGFloat = 270
self.imagegirl = UIImageView(frame: CGRect(x: (screen.size.width - imageWidth)/2, y: imageTopView, width: imageWidth, height: imageHeight))
self.view.addSubview(imagegirl)
imagegirl1 = UIImage(named: "girl_01")
imagegirl.image = imagegirl1
// Create a gesture recognizer
let recognizer = UIRotationGestureRecognizer(target: self, action: #selector(findRatation(_:)))
// Associate gestures to imagegirl
self.imagegirl.addGestureRecognizer(recognizer)
// Set up imagegirl Open user event
self.imagegirl.isUserInteractionEnabled = true
}
@objc func findRatation(_ sender:UIRotationGestureRecognizer){
print("Rattion……")
self.imagegirl.transform = CGAffineTransform(rotationAngle: self.rotationAngleInRadians + sender.rotation)
if sender.state == .ended {
self.rotationAngleInRadians += sender.rotation
}
}
}
6、Pinch
import UIKit
class ViewController: UIViewController {
var imagegirl : UIImageView!
var imagegirl1 : UIImage!
// Used to save the scale size of the last zoom
var currentScale:CGFloat = 1.0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set up imagegirl Size and properties of
let screen = UIScreen.main.bounds
let imageWidth:CGFloat = 100
let imageHeight:CGFloat = 150
let imageTopView:CGFloat = 270
self.imagegirl = UIImageView(frame: CGRect(x: (screen.size.width - imageWidth)/2, y: imageTopView, width: imageWidth, height: imageHeight))
self.view.addSubview(imagegirl)
imagegirl1 = UIImage(named: "girl_01")
imagegirl.image = imagegirl1
// Create a gesture recognizer
let recognizer = UIPinchGestureRecognizer(target: self, action: #selector(findPinch(_:)))
// Associate gestures to imagegirl
self.imagegirl.addGestureRecognizer(recognizer)
// Set up imagegirl Open user event
self.imagegirl.isUserInteractionEnabled = true
}
@objc func findPinch(_ sender:UIPinchGestureRecognizer){
print(" Zoom factor = ",sender.scale)
if sender.state == .ended {
self.currentScale = sender.scale
}else if sender.state == .began && currentScale != 0.0 {
sender.scale = currentScale
}
self.imagegirl.transform = CGAffineTransform(scaleX: sender.scale, y: sender.scale)
}
}
7、Screen Edge Pan gesture
import UIKit
class ViewController: UIViewController {
var label:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Set size and properties
let screen = UIScreen.main.bounds
let labelWidth:CGFloat = 200
let labelHeight:CGFloat = 150
let labelTopView:CGFloat = 270
self.label = UILabel(frame: CGRect(x: (screen.size.width - labelWidth)/2, y: labelTopView, width: labelWidth, height: labelHeight))
self.label.text = " Screen edge gesture recognition "
self.label.textColor = .white
self.label.textAlignment = .center
self.view.addSubview(self.label)
// Create a gesture recognizer
let edges:[UIRectEdge] = [.right,.left]
for edge in edges {
let recognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(findScreenPan(_:)))
// Set the direction of the screen edge translation
recognizer.edges = edge
// Associate gestures to View
self.view.addGestureRecognizer(recognizer)
}
// Set up imagegirl Open user event
self.view.isUserInteractionEnabled = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@objc func findScreenPan(_ sender:UIScreenEdgePanGestureRecognizer){
print("edge = ",sender.edges.rawValue)
switch sender.edges {
case UIRectEdge.right:
self.label.text = " Shift left edge "
case UIRectEdge.left :
self.label.text = " Shift to the right edge "
default:
self.label.text = " Unknown direction "
}
}
}
边栏推荐
- YOLOv5的Tricks | 【Trick8】图片采样策略——按数据集各类别权重采样
- ELK日志系统实战(六):技术选型之vector与filebeat对比
- Clojure installation of metabase source code secondary development
- Multi thread tutorial (30) meta sharing mode
- 1. use alicloud object OSS (basic)
- NDK learning notes (XI) POSIX sockect local communication
- NDK learning notes (II)
- ReferenceError: server is not defined
- Get the value of program exit
- MinGW-W64安装说明
猜你喜欢

Wechat applet learning record

Getting started with kotlin

MySQL string to array, merge result set, and convert to array

深度学习分布式训练
![Yoyov5's tricks | [trick8] image sampling strategy -- Sampling by the weight of each category of the dataset](/img/54/f6a3e0ef1f77901506642784e6d3b7.png)
Yoyov5's tricks | [trick8] image sampling strategy -- Sampling by the weight of each category of the dataset

Number of atoms (easy to understand)

String sorting times --- bubble sorting deformation

Maximum number of points on the line ----- hash table solution

数据接入平台方案实现(游族网络)

getBackgroundAudioManager控制音乐播放(类名的动态绑定)
随机推荐
After adding the header layout to the recyclerview, use the adapter Notifyitemchanged (POS,'test') invalid local refresh
微信小程序text内置组件换行符不换行的原因-wxs处理换行符,正则加段首空格
Managing VHDS using batch
Using batch enumeration files
Multithreading tutorial (XXVIII) unsafe class
配置Rust编译环境
AltiumDesigner2020导入3D Body-SOLIDWORKS三维模型
JS promise, async, await simple notes
Fix [no Internet, security] problem
NDK R21 compiles ffmpeg 4.2.2+x264 and converts video files using ffmpeg
In the future, how long will robots or AI have human creativity?
Activity start process record
Recherche sur l'optimisation de Spark SQL basée sur CBO pour kangourou Cloud Stack
“All in ONE”一个平台解决所有需求,运维监控3.0时代已来
Exploration of kangaroo cloud data stack on spark SQL optimization based on CBO
es-ik 安装报错
Maximum number of points on the line ----- hash table solution
Combing route - Compaction Technology
NFC Development -- the method of using NFC mobile phones as access control cards (II)
Share an RSA encryption and decryption tool class, including public key encryption, private key decryption, private key encryption, public key decryption, private key signature, public key verificatio