2016-05-01 6 views
4

Я строил пример о FloatingButton.Повернуть изображение -45 градусов

Но у меня есть проблемы с поворотным изображением. Я хочу, чтобы повернуть, как эту ссылку

https://github.com/yoavlt/LiquidFloatingActionButton

Но моя кнопка:

enter image description here

Как вы можете видеть, когда я нажимаю в первый раз, он хорошо работать: D, это преобразовать, как x, но когда я нажимаю снова, я хочу, чтобы он вернулся к оригиналу, как +, но он не работает.

Вот мой код:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var floatingButton: UIImageView! 
    var floatingButtonIsActive = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     addShadowToFloatingButton() 
     let gesture = UITapGestureRecognizer(target: self, action: #selector(floatingButtonTapped(_:))) 
     floatingButton.addGestureRecognizer(gesture) 
    } 

    private func addShadowToFloatingButton() { 
     floatingButton.layer.shadowColor = UIColor.grayColor().CGColor 
     floatingButton.layer.shadowOffset = CGSize(width: -2, height: 2) 
     floatingButton.layer.shadowOpacity = 1 
     floatingButton.layer.shadowRadius = 1 
    } 

    func floatingButtonTapped(sender: UITapGestureRecognizer) { 

     if floatingButtonIsActive == false { 

      UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: .CurveEaseInOut, animations: { 
       self.floatingButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4)) 
       }, completion: { _ in 
        self.floatingButtonIsActive = true 
      }) 

     } else { 
      UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: .CurveEaseInOut, animations: { 
       self.floatingButton.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_4)) 
       }, completion: { _ in 
        self.floatingButtonIsActive = false 
      }) 
     } 
    } 
} 
+0

Вы можете снова повернуть на 45 градусов. Он будет иметь такой же эффект. self.floatingButton.transform = CGAffineTransformMakeRotation (CGFloat (M_PI_4)) –

+0

Нет, это не сработает, как вы сказали. – Khuong

ответ

9

Установите трансформироваться в CGAffineTransformIdentity, когда вы закончите. Это преобразование, которое оно изначально имело. Когда вы устанавливаете преобразование, вы говорите ему, что абсолютный угол вращается, независимо от того, какой угол он сейчас находится.

func floatingButtonTapped(sender: UITapGestureRecognizer) { 

    if floatingButtonIsActive == false { 

     UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: .CurveEaseInOut, animations: { 
      self.floatingButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4)) 
      }, completion: { _ in 
       self.floatingButtonIsActive = true 
     }) 

    } else { 
     UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: .CurveEaseInOut, animations: { 
      self.floatingButton.transform = CGAffineTransformIdentity 
      }, completion: { _ in 
       self.floatingButtonIsActive = false 
     }) 
    } 
} 
0

Swift 4:

для 180" вращения:

self.yourLayerName.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi)) 

для возвращения значения по умолчанию позиции:

self.yourLayerName.transform = .identity 

Для изменения угла поворота вы можете умножить или деление "pi".

45" вращения:

self.yourLayerName.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2))