Как выполнить переход жестом смахивания вправо

Я хочу выполнить переход, проведя пальцем вправо.

показ пальцем, прокручивающим край ячейки

Какая лучшая практика?


person Andrew Harris    schedule 01.05.2016    source источник
comment
Если вы хотите, чтобы переход происходил только тогда, когда пользователь проводит от края экрана, посмотрите на UIScreenEdgePanGestureRecognizer.   -  person Daniel Storm    schedule 02.05.2016


Ответы (1)


Я реализую переход с «пролистывания слева направо» с настраиваемым переходом и распознавателем жестов смахивания.

Вам нужно создать новый файл .swift и использовать segue как класс в свойствах построителя интерфейса.

введите здесь описание изображения

//  Created by David Seek on 25.04.16.
//  Copyright © 2016 David Seek. All rights reserved.
//

import UIKit

class FromLeftToRightSegue: UIStoryboardSegue {
    override func perform() {

        let firstVC = self.sourceViewController.view as UIView!
        let secondVC = self.destinationViewController.view as UIView!

        let screenWidth = UIScreen.mainScreen().bounds.size.width
        let screenHeight = UIScreen.mainScreen().bounds.size.height


        secondVC.frame = CGRectMake(-screenWidth, 0, screenWidth, screenHeight)

        let window = UIApplication.sharedApplication().keyWindow
        window?.insertSubview(secondVC, aboveSubview: firstVC)

        // Animate the transition.
        UIView.animateWithDuration(0.3, animations: { () -> Void in // set animation duration

            firstVC.frame = CGRectOffset(firstVC.frame, 0.0, 0.0) // old screen stay

            secondVC.frame = CGRectOffset(secondVC.frame, screenWidth, 0.0) // new screen strave from left to right

        }) { (Finished) -> Void in
            self.sourceViewController.presentViewController(self.destinationViewController as UIViewController,
                                                            animated: false,
                                                            completion: nil)
        }
    }

}

Распознаватель жестов смахивания также необходимо ввести в новый файл .swift:

import Foundation
import UIKit

//
//  UISwipeGestureRecognizer.h
//  UIKit
//
//  Copyright (c) 2009-2015 Apple Inc. All rights reserved.
//

// Recognizes: when numberOfTouchesRequired have moved mostly in the specified direction, enough to be considered a swipe.
//             a slow swipe requires high directional precision but a small distance
//             a fast swipe requires low directional precision but a large distance

// Touch Location Behaviors:
//     locationInView:         location where the swipe began. this is the centroid if more than one touch was involved
//     locationOfTouch:inView: location of a particular touch when the swipe began

public struct UISwipeGestureRecognizerDirection : OptionSetType {
    public init(rawValue: UInt)

    public static var Right: UISwipeGestureRecognizerDirection { get }
    public static var Left: UISwipeGestureRecognizerDirection { get }
    public static var Up: UISwipeGestureRecognizerDirection { get }
    public static var Down: UISwipeGestureRecognizerDirection { get }
}

@available(iOS 3.2, *)
public class UISwipeGestureRecognizer : UIGestureRecognizer {

    public var numberOfTouchesRequired: Int // default is 1. the number of fingers that must swipe
    public var direction: UISwipeGestureRecognizerDirection // default is UISwipeGestureRecognizerDirectionRight. the desired direction of the swipe. multiple directions may be specified if they will result in the same behavior (for example, UITableView swipe delete)
}

Вызывается внутри желаемого ViewController.swift:

private var swipeGestureRecognizer: UISwipeGestureRecognizer?

override func viewDidLoad() {
    super.viewDidLoad()
    swipeGestureRecognizer = MySwipeGestureRecognizer(target: self, swipeLeftSegue: "yourSwipeLeftSegue", swipeRightSeque: "yourSwipeRightSegue")
        view.addGestureRecognizer(swipeGestureRecognizer!)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "yourSwipeLeftSegue" {
        //your code goes here
    }
}

Надеюсь, это сработает для вас, если у вас есть вопросы, дайте мне знать.

person David Seek    schedule 01.05.2016
comment
вау да это именно то, что я ищу, спасибо за вашу помощь :) - person Andrew Harris; 02.05.2016