iOS
UIGestureRecognizer
Sök…
UITapGestureRecognizer
Initiera UITapGestureRecognizer med ett mål, self i detta fall, och en action som är en metod som har en enda parameter: en UITapGestureRecognizer .
Efter initiering lägger du till den i vyn att den ska känna igen kranar.
Snabb
override func viewDidLoad() {
super.viewDidLoad()
let recognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
view.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer) {
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *recognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTap:)];
[self.view addGestureRecognizer:recognizer];
}
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
}
Exempel på avstängning av tangentbord genom UITapGestureRecognizer:
Först skapar du funktionen för att avföra tangentbordet:
func dismissKeyboard() {
view.endEditing(true)
}
Sedan lägger du till en kännagestigenkännare i din visningskontroller och ringer den metod vi just har gjort
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
Exempel på att få gestplats UITapGestureRecognizer (Swift 3):
func handleTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.recognized
{
print(gestureRecognizer.location(in: gestureRecognizer.view))
}
}
UIPanGestureRecognizer
Pan-gestigenkännare upptäcker dra-gester. Följande exempel lägger till en bild till en vykontroller och låter användaren dra den runt på skärmen.
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"imageToDrag"]];
[imageView sizeToFit];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[imageView addGestureRecognizer:pan];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.view];
}
Snabb
override func viewDidLoad() {
super.viewDidLoad()
let imageView = UIImageView.init(image: UIImage.init(named: "imageToDrag"))
imageView.sizeToFit()
imageView.isUserInteractionEnabled = true
self.view.addSubview(imageView)
let pan = UIPanGestureRecognizer.init(target: self, action: #selector(handlePan(recognizer:)))
imageView.addGestureRecognizer(pan)
}
func handlePan(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x: view.center.x + translation.x, y: view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
}
Observera: Även om
UIPanGestureRecognizerär användbar för att upptäcka alla dragbaser, om du bara vill upptäcka en grundläggande gest, till exempel att användaren drar fingret åt vänster / höger eller upp / ner, användUISwipeGestureRecognizer.UIPanGestureRecognizerär ett bättre val om du behöver tillgång till metoder somtranslationInView:ellervelocityInView:.
UITapGestureRecognizer (dubbelkran)
Dubbeltryckningen, som en enda tryckning, använder också UITapGestureRecognizer . Du ställer helt enkelt in numberOfTapsRequired till 2 .
Snabb
override func viewDidLoad() {
super.viewDidLoad()
// Double Tap
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap))
doubleTapGesture.numberOfTapsRequired = 2
doubleTapView.addGestureRecognizer(doubleTapGesture)
}
// Double tap action
func handleDoubleTap() {
label.text = "Double tap recognized"
}
anteckningar
- Ett exempelprojekt hittar du här .
- Du kan känna igen en trippelkran genom att ställa in
numberOfTapsRequiredtill3.
UILongPressGestureRecognizer
Med UILongPressGestureRecognizer kan du lyssna länge på en vy. Du kan ställa in längden på fördröjningen innan åtgärdsmetoden anropas.
Snabb
override func viewDidLoad() {
super.viewDidLoad()
// Long Press
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
longPressView.addGestureRecognizer(longPressGesture)
}
// Long press action
func handleLongPress(gesture: UILongPressGestureRecognizer) {
if gesture.state == UIGestureRecognizerState.Began {
label.text = "Long press recognized"
}
}
anteckningar
Ett mer fullständigt exempelprojekt hittar du här .
Ändra
minimumPressDurationatt ställa in längden på lång tryckning.
UISwipeGestureRecognizer
Dra gester låter dig lyssna för användaren att flytta fingret över skärmen snabbt i en viss riktning.
Snabb
override func viewDidLoad() {
super.viewDidLoad()
// Swipe (right and left)
let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:)))
swipeRightGesture.direction = UISwipeGestureRecognizerDirection.Right
swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.Left
swipeView.addGestureRecognizer(swipeRightGesture)
swipeView.addGestureRecognizer(swipeLeftGesture)
}
// Swipe action
func handleSwipe(gesture: UISwipeGestureRecognizer) {
label.text = "Swipe recognized"
// example task: animate view off screen
let originalLocation = swipeView.center
if gesture.direction == UISwipeGestureRecognizerDirection.Right {
label.text = "Swipe right"
} else if gesture.direction == UISwipeGestureRecognizerDirection.Left {
label.text = "Swipe left"
}
}
Objective-C
- (void)viewDidLoad
{
[super viewDidLoad];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
// Adding the swipe gesture on image view
[self.view addGestureRecognizer:swipeLeft];
[self.view addGestureRecognizer:swipeRight];
}
//Handling Swipe Gesture Events
- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe {
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Left Swipe");
}
if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Right Swipe");
}
}
anteckningar
- Ett mer fullständigt projektexempel finns här .
UIPinchGestureRecognizer
Nypor är en tvåfingerad gest där fingrarna rör sig närmare eller längre från varandra. Denna gest används vanligtvis för att ändra storlek på en vy.
Snabb
override func viewDidLoad() {
super.viewDidLoad()
// Pinch
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(_:)))
pinchView.addGestureRecognizer(pinchGesture)
}
// Pinch action
func handlePinch(gesture: UIPinchGestureRecognizer) {
label.text = "Pinch recognized"
if gesture.state == UIGestureRecognizerState.Changed {
let transform = CGAffineTransformMakeScale(gesture.scale, gesture.scale)
pinchView.transform = transform
}
}
anteckningar
- Ett mer fullständigt projektexempel finns här .
UIRotationGestureRecognizer
Två fingrar som roterar runt ett centrum kan lyssnas på med UIRotationGestureRecognizer . Detta används vanligtvis för att rotera en vy.
Snabb
override func viewDidLoad() {
super.viewDidLoad()
// Rotate
let rotateGesture = UIRotationGestureRecognizer(target: self, action: #selector(handleRotate(_:)))
rotateView.addGestureRecognizer(rotateGesture)
}
// Rotate action
func handleRotate(gesture: UIRotationGestureRecognizer) {
label.text = "Rotate recognized"
if gesture.state == UIGestureRecognizerState.Changed {
let transform = CGAffineTransformMakeRotation(gesture.rotation)
rotateView.transform = transform
}
}
anteckningar
- Ett exempelprojekt hittar du här .
Lägga till en gestigenkännare i Interface Builder
Dra en gestigenkännare från objektbiblioteket till din vy.
Kontrollera dra från gesten i Document Outline till din View Controller-kod för att göra ett uttag och en åtgärd.
anteckningar
- Detta exempel kommer från detta mer fullständiga exempelprojekt som visar gestigenkännare.

