raginggoat
raginggoat

Reputation: 3600

Gesture Recognizer Not Working

I have added left and right swipe gesture recognizers to an image view but only the right swipe works.

    let swipeLeftRecognizer = UISwipeGestureRecognizer(target: self, action: "swipeLeft")
            swipeLeftRecognizer.direction = .Left
            let swipeRightRecognizer = UISwipeGestureRecognizer(target: self, action: "swipeRight")
            swipeLeftRecognizer.direction = .Right
            if itemImages.count > 1 {
                imageView.addGestureRecognizer(swipeLeftRecognizer)
                imageView.addGestureRecognizer(swipeRightRecognizer)

                for recognizer in imageView.gestureRecognizers! {
                    recognizer.delegate = self
                }

func swipeRight() {
        if currentIndex == 0 {
            itemImages.last!.getDataInBackgroundWithBlock( {
                (data, error) -> Void in
                self.imageView.image = UIImage(data: data!)
            })

            let transition = CATransition()
            transition.duration = 1.0
            transition.subtype = kCATransitionFromLeft
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = kCATransitionReveal
            imageView.layer.addAnimation(transition, forKey: nil)
            currentIndex = itemImages.count - 1
        } else {
            itemImages[currentIndex - 1].getDataInBackgroundWithBlock( {
                (data, error) -> Void in
                self.imageView.image = UIImage(data: data!)
            })

            let transition = CATransition()
            transition.duration = 1.0
            transition.subtype = kCATransitionFromLeft
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = kCATransitionReveal
            imageView.layer.addAnimation(transition, forKey: nil)
            currentIndex--
        }
    }

    func swipeLeft() {
        let index = itemImages.count - 1
        if currentIndex == index {
            itemImages[0].getDataInBackgroundWithBlock( {
                (data, error) -> Void in
                self.imageView.image = UIImage(data: data!)
            })

            let transition = CATransition()
            transition.duration = 1.0
            transition.subtype = kCATransitionFromLeft
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = kCATransitionReveal
            imageView.layer.addAnimation(transition, forKey: nil)
            currentIndex = 0
        } else {
            itemImages[currentIndex + 1].getDataInBackgroundWithBlock( {
                (data, error) -> Void in
                self.imageView.image = UIImage(data: data!)
            })

            let transition = CATransition()
            transition.duration = 1.0
            transition.subtype = kCATransitionFromLeft
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.type = kCATransitionReveal
            imageView.layer.addAnimation(transition, forKey: nil)
            currentIndex++
        }
    }

Upvotes: 0

Views: 67

Answers (1)

DonatassVZ
DonatassVZ

Reputation: 26

 let swipeLeftRecognizer = UISwipeGestureRecognizer(target: self, action: "swipeLeft")
        swipeLeftRecognizer.direction = .Left
        let swipeRightRecognizer = UISwipeGestureRecognizer(target: self, action: "swipeRight")
        swipeRightRecognizer.direction = .Right

/// you twice use 'swipeLeftRecognizer.direction'. And now your leftSwite work with right direction

Or you can conect swipeGesture from storyboard to your "swipeLeft" and "swipeRight" method and dont write any code before

Upvotes: 1

Related Questions