Home > Enterprise >  Transform collection view cell container after Swipe to right and left
Transform collection view cell container after Swipe to right and left

Time:10-10

I'm trying to add Swipe to right and left to collection view cell to transform the container to the right and left with a certain angle

Here is my initial setup

   private func setupGestures() {
        let swipeToRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeRight))
        swipeToRight.direction = .right
        container.addGestureRecognizer(swipeToRight)
        
        let swipeToLeft = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeLeft))
        swipeToLeft.direction = .left
        container.addGestureRecognizer(swipeToLeft)
        
    }
    
    @objc func respondToSwipeRight(gesture: UIGestureRecognizer) {
        
        let angle = CGFloat(Double.pi/2)
        
        UIView.animate(withDuration: 0.5) {
            self.container.transform = CGAffineTransform(rotationAngle: angle)
        }
    }
    
    
    @objc func respondToSwipeLeft(gesture: UIGestureRecognizer) {
        
        let angle = -CGFloat(Double.pi/2)
        
        UIView.animate(withDuration: 0.5) {
            self.container.transform = CGAffineTransform(rotationAngle: angle)
        }
    }



But it completely rotate the container, which is I don't want, I want to make it something like it, and turn back to it's initial position after a sec or two

[![how it should transform][1]][1]

And it would be so awesome that move based on Swiping position, I mean not automatically goes to that level of position, move with finger tip and when it reach there, just stop moving.

Could anyone help me to implement it, I have no idea how I can do it

Many thanks

CodePudding user response:

Adding completion in UIView.animate in order to turn back to initial state. After a sec or two is depends on your duration in UIView.animate

Code will be like this

UIView.animate(withDuration: 0.5, animations: {
    self.container.transform = CGAffineTransform(rotationAngle: 0.5)
}, completion: {
    _ in
    // turn back to the previous before transform
    self.container.transform = .identity
})

And for your second question, you can implement with touchesBegan and touchesMoved or add PanGesture to handle changing position container view frame like you want.

  • Related