LoginSignup
5
5

More than 5 years have passed since last update.

borderColorをアニメーションさせる CATransaction

Last updated at Posted at 2016-02-06

UIViewbackgroundColorなどのプロパティはUIViewのクラスメソッド+animateWithDuration:animations:でアニメーションが可能です。

しかしCALayerのプロパティborderColorは上記メソッドでは変化しないので、別法でアニメーションさせます。

Swift

let view = UIView.init(frame: CGRectMake(0, 0, 100, 100))
self.view.addSubview(view)
view.layer.borderColor = UIColor.blackColor().CGColor
view.layer.borderWidth = 10.0
view.layer.cornerRadius = 50.0

CATransaction.begin()
// borderColorを指定
let borderColorAnimation = CABasicAnimation.init(keyPath: "borderColor")
// 開始時の色
borderColorAnimation.fromValue = UIColor.blackColor().CGColor
// 終了時の色
borderColorAnimation.toValue = UIColor.greenColor().CGColor
// アニメーションの持続時間
borderColorAnimation.duration = 5.0
// アニメーションのカーブ
borderColorAnimation.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseOut)
// 完了後にリセットされないようにする (デフォルトはkCAFillModeRemoved)
borderColorAnimation.fillMode = kCAFillModeForwards
borderColorAnimation.removedOnCompletion = false
// アニメーション完了時  (※ addAnimationの前に記述しないといけない)
CATransaction.setCompletionBlock { () -> Void in

}
// ターゲットへ設定、任意のアニメーション名をつける
view.layer.addAnimation(borderColorAnimation, forKey: "borderColorAnimation1")
CATransaction.commit()

Objective-C

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
[self.view addSubview:view];
view.layer.borderColor = [UIColor clearColor].CGColor;
view.layer.borderWidth = 10.0f;
view.layer.cornerRadius = 50.0f;

[CATransaction begin]; {
    // borderColorを指定
    CABasicAnimation *borderColorAnimation = [CABasicAnimation animationWithKeyPath:@"borderColor"];
    // 開始時の色
    borderColorAnimation.fromValue = (__bridge id)[UIColor clearColor].CGColor;
    // 終了時の色
    borderColorAnimation.toValue   = (__bridge id)[UIColor redColor].CGColor ;
    // アニメーションの持続時間
    borderColorAnimation.duration = 3.0;
    // アニメーションのカーブ
    borderColorAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
    // 完了後にリセットされないようにする (デフォルトはkCAFillModeRemoved)
    borderColorAnimation.fillMode = kCAFillModeForwards;
    borderColorAnimation.removedOnCompletion = NO;
    // アニメーション完了時  (※ addAnimationの前に記述しないといけない)
    [CATransaction setCompletionBlock:^{

    }];
    // ターゲットへ設定、任意のアニメーション名をつける
    [view.layer addAnimation:borderColorAnimation forKey:@"borderColorAnimation5"];
} [CATransaction commit];

参考

Facebookが開発・メンテナンスをしているpopというアニメーションライブラリもおすすめです。

:link: facebook / pop
:link: CATransaction

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5