UIViewとそのコンテンツのサイズを係数で変更するアニメーションを作成したい。基本的に、最初にビューを拡大してから元のサイズに戻すアニメーションを作成します。
これを行う最良の方法は何ですか? CALayer.contentScaleを試しましたが、何もしませんでした。
次のように、いくつかのアニメーションブロックを一緒にネストできます。
Objective-C:
[UIView animateWithDuration:1
animations:^{
yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
}
completion:^(BOOL finished) {
[UIView animateWithDuration:1
animations:^{
yourView.transform = CGAffineTransformIdentity;
}];
}];
スイフト2:
UIView.animateWithDuration(1, animations: { () -> Void in
yourView.transform = CGAffineTransformMakeScale(1.5, 1.5)
}) { (finished: Bool) -> Void in
UIView.animateWithDuration(1, animations: { () -> Void in
yourView.transform = CGAffineTransformIdentity
})}
Swift 3および4:
UIView.animate(withDuration: 1, animations: {
yourView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
}) { (finished) in
UIView.animate(withDuration: 1, animations: {
yourView.transform = CGAffineTransform.identity
})
}
スケール値と期間を独自のものに置き換えます。
ループする小さなアプローチを次に示します。
[UIView animateWithDuration:1
delay:0
options:UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat
animations:^{
yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
}
completion:nil];
オプション「UIViewKeyframeAnimationOptionRepeat
」は、「呼吸」を維持したくない場合にループさせるものです。アニメーションブロックは「吸入」として機能し、UIViewKeyframeAnimationOptionAutoreverse
オプションは自動的に「呼気」アニメーションを再生します。
Swift 5 UIView拡張機能:
extension UIView {
func Pulse(withIntensity intensity: CGFloat, withDuration duration: Double, loop: Bool) {
UIView.animate(withDuration: duration, delay: 0, options: [.repeat, .autoreverse], animations: {
loop ? nil : UIView.setAnimationRepeatCount(1)
self.transform = CGAffineTransform(scaleX: intensity, y: intensity)
}) { (true) in
self.transform = CGAffineTransform.identity
}
}
}
次に、次を使用します。
yourView.Pulse(withIntensity: 1.2, withDuration: 0.5, loop: true)
yourView
を独自のビューに置き換えてください。