0

Хорошо, я создал приложение слайдера для просмотра страниц. Все работает отлично, но теперь я хотел бы иметь возможность вставлять/выходить из моего UIPageViewController с помощью UIPinchGestureRecognizer.Swift - UIPinchGestureRecognizer в UIPageViewController

У меня есть все, что создано в коде, но я все еще получаю эту ОШИБКУ, когда я зажимаю.

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[App.ViewController pinchDetected]: unrecognized selector sent 
to instance 0x7faadc90c6f0' 

Как я могу использовать функцию pinchDetected в UIPageViewController с помощью UIPinchGestureRecognizer?

Пожалуйста, позвольте мне теперь, если я делаю это неправильно. Новое в скор/ИОС

мой код

class ViewController: UIViewController, UIPageViewControllerDataSource { 

var pageViewController: UIPageViewController! 

private var allPages = [Page]() 
var pages = NSMutableOrderedSet() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    ###PinchRecognizer 
    var pinchRecognizer = UIPinchGestureRecognizer(target:self, action:"pinchDetected") 
    self.view.addGestureRecognizer(pinchRecognizer) 

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController 
    self.pageViewController.dataSource = self 

    var startVC = self.viewControllerAtIndex(0) as ContentViewController 
    var viewControllers = NSArray(object: startVC) 
    self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil) 

    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height) 

    self.addChildViewController(self.pageViewController) 
    self.view.addSubview(self.pageViewController.view) 
    self.pageViewController.didMoveToParentViewController(self) 
} 

###PinchRecognizer Function 
func pinchDetected(pinchRecognizer: UIPinchGestureRecognizer) { 
    var scale: CGFloat = pinchRecognizer.scale; 
    self.view.transform = CGAffineTransformScale(self.view.transform, scale, scale); 
    pinchRecognizer.scale = 1.0; 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if (index == 0 || index == NSNotFound) { 
     return nil 
    } 

    index-- 
    return self.viewControllerAtIndex(index) 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 

    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if (index == NSNotFound) { 
     return nil 
    } 

    index++ 

    if (index == self.pages.count) { 
     return nil 
    } 

    return self.viewControllerAtIndex(index) 

} 

func viewControllerAtIndex(index: Int) -> ContentViewController 
{ 
    if ((self.pages.count == 0) || (index >= self.pages.count)) { 
     return ContentViewController() 
    } 

    var vc: ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController 

    ###Store image in imageFile 
    var image = (pages.objectAtIndex(index) as! Page).image   
    vc.imageFile = image 
    vc.pageIndex = index 

    return vc 

} 

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int 
{ 
    return self.pages.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int 
{ 
    return 0 
} 

} 

ответ

2

Ваш селектор action:"pinchDetected" неправильно. Он должен быть action:"pinchDetected:".

+1

sahara108 правильно и быстрее, чем я комментировал. Когда у вас есть параметр, добавьте «:» к имени действия. Это может быть причиной ошибки. – MacKentoch

0

Swift 3:

//PinchRecognizer 
let pinchRecognizer = UIPinchGestureRecognizer(target:self, action: #selector(pinchDetected)) 
self.view.addGestureRecognizer(pinchRecognizer)