2017-04-14 11 views
-5

私は、ユーザーがログインビューにパスや電子メールを挿入できなかったときに、画面が揺れ、誰かが私を助けることができる機能を作成しようとしていますか?iOS:失敗したログインアニメーションの作成方法

enter image description here

+0

コードを追加します。.. –

+1

スクリーンショット、あなたのコードではなく追加してください、しかし、あなたの質問に貼り付けることによって。 – rckoenes

答えて

1

あなたが拡張機能を作成するか、またはほとんどない任意のビューを振るために、以下の機能に少し変更を加えないビューを振るために、この機能

public func shakeView() { 

    let shake: CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "transform") 
    shake.values = [NSValue(caTransform3D: CATransform3DMakeTranslation(-5.0, 0.0, 0.0)), NSValue(caTransform3D: CATransform3DMakeTranslation(5.0, 0.0, 0.0))] 
    shake.autoreverses = true 
    shake.repeatCount = 2.0 
    shake.duration = 0.07 

    self.layer.add(shake, forKey:"shake") 
} 

で任意のビューを振ることができます。

0

CABasicAnimationで振りアニメーションを適用できます。

例:

class ViewController: UIViewController { 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     shakeAnimation() 
    } 

    func shakeAnimation() { 
     let animation = CABasicAnimation(keyPath: "position") 
     animation.duration = 0.3 
     animation.repeatCount = 10 
     animation.autoreverses = true 
     animation.fromValue = NSValue(cgPoint: CGPoint(x: self.view.center.x - 10, y: self.view.center.y)) 
     animation.toValue = NSValue(cgPoint: CGPoint(x: self.view.center.x + 10, y: self.view.center.y)) 
     self.view.layer.add(animation, forKey: "position") 
    } 
} 

結果:

enter image description here

0

は、いくつかの時間前にそれのためのビューを書きました。 、インターフェイスビルダーでその中にすべてのものを置きIBOutletとしてビューをリンクし、呼び出す:

shakeItView.shake(completion: { _ in }) 

コード私のコンポーネントのために:

public final class ShakeItView: UIView { 

    public func shake(completion: @escaping (Bool) ->()) { 
     UIView.animate(withDuration: 0.07 - TimeInterval(count) * 0.01, delay: 0.01, options: .curveEaseInOut, animations: { [unowned self] in 
      self.transform = CGAffineTransform.init(translationX: CGFloat(10 * self.direction), y: 0) 
     }) { [unowned self] _ in 
      if self.count >= 4 { 
       self.transform = CGAffineTransform.identity 
       self.resetValues() 
       completion(true) 
      } else { 
       self.count += 1 
       self.direction *= -1 
       self.shake(completion: completion) 
      } 
     } 
    } 

    private var direction: Int = 1 
    private var count: Int = 0 

    private func resetValues() { 
     direction = 1 
     count = 0 
    } 

} 
関連する問題