Core Animation

霍浩皛
2023-12-01


1:UIViewAnimationOptions

参考:http://blog.csdn.net/namehzf/article/details/7650416

typedef NS_OPTIONS(NSUInteger, UIViewAnimationOptions) {
    UIViewAnimationOptionLayoutSubviews            = 1 <<  0,
    UIViewAnimationOptionAllowUserInteraction      = 1 <<  1, // 允许视图在播放动画的时候 依旧触发事件
    UIViewAnimationOptionBeginFromCurrentState     = 1 <<  2, // 从当前状态开始动画
    UIViewAnimationOptionRepeat                    = 1 <<  3, // 重复执行动画
    UIViewAnimationOptionAutoreverse               = 1 <<  4, // 执行动画回路
    UIViewAnimationOptionOverrideInheritedDuration = 1 <<  5, // ignore nested duration
    UIViewAnimationOptionOverrideInheritedCurve    = 1 <<  6, // ignore nested curve
    UIViewAnimationOptionAllowAnimatedContent      = 1 <<  7, // animate contents (applies to transitions only)
    UIViewAnimationOptionShowHideTransitionViews   = 1 <<  8, // flip to/from hidden state instead of adding/removing
    
    UIViewAnimationOptionCurveEaseInOut            = 0 << 16, // 由慢到快
    UIViewAnimationOptionCurveEaseIn               = 1 << 16, // 由慢到飞快
    UIViewAnimationOptionCurveEaseOut              = 2 << 16, // 由快到慢
    UIViewAnimationOptionCurveLinear               = 3 << 16, // 匀速展示动画
    
    UIViewAnimationOptionTransitionNone            = 0 << 20, // default
    UIViewAnimationOptionTransitionFlipFromLeft    = 1 << 20,
    UIViewAnimationOptionTransitionFlipFromRight   = 2 << 20,
    UIViewAnimationOptionTransitionCurlUp          = 3 << 20,
    UIViewAnimationOptionTransitionCurlDown        = 4 << 20,
    UIViewAnimationOptionTransitionCrossDissolve   = 5 << 20,
    UIViewAnimationOptionTransitionFlipFromTop     = 6 << 20,
    UIViewAnimationOptionTransitionFlipFromBottom  = 7 << 20,
} NS_ENUM_AVAILABLE_IOS(4_0);





1:View改变大小和位置

CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelegate:self];
self.frame =CGRectMake(0,self.frame.size.height-44,self.frame.size.width,44);
[UIView commitAnimations];

2:改变View的自身大小

CGAffineTransform tr = CGAffineTransformScale(self.transform, 0.55, 0.55); 
[UIView animateWithDuration:0.1 delay:0 options:0 animations:^{ 
        self.transform = tr;
} completion:^(BOOL finished) {}];

3:通过指定的线条确定动画轨迹

CGPoint fromPoint = CGPointMake(0, 0);
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:fromPoint];
CGPoint toPoint = CGPointMake(300, 460);
[movePath addQuadCurveToPoint:toPoint
                     controlPoint:CGPointMake(toPoint.x,fromPoint.y)];//弧线
    
 CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
 moveAnim.path = movePath.CGPath;
 moveAnim.removedOnCompletion = NO;
 moveAnim.duration = 2;
 [moveAnim setRepeatCount:2];
 [self.view1.layer addAnimation:moveAnim forKey:nil];


4: View 旋转180度

CGAffineTransformRotate(self.colTypeImageView.transform, 3.14 )

5:View 左右抖动动画

- (void) shakeAnimationWithControl:(UIView *)view {
    CAKeyframeAnimation *keyAn = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    [keyAn setDuration:0.5f];
    NSArray *array = [[NSArray alloc] initWithObjects:
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x-5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x+5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x-5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x+5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x-5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x+5, view.center.y)],
                      [NSValue valueWithCGPoint:CGPointMake(view.center.x, view.center.y)],
                      nil];
    [keyAn setValues:array];
    NSArray *times = [[NSArray alloc] initWithObjects:
                      [NSNumber numberWithFloat:0.1f],
                      [NSNumber numberWithFloat:0.2f],
                      [NSNumber numberWithFloat:0.3f],
                      [NSNumber numberWithFloat:0.4f],
                      [NSNumber numberWithFloat:0.5f],
                      [NSNumber numberWithFloat:0.6f],
                      [NSNumber numberWithFloat:0.7f],
                      [NSNumber numberWithFloat:0.8f],
                      [NSNumber numberWithFloat:0.9f],
                      [NSNumber numberWithFloat:1.0f],
                      nil];
    [keyAn setKeyTimes:times];
    [view.layer addAnimation:keyAn forKey:@"TextAnim"];
}

6:切换ViewController或者将应用切换至后台时,动画不停止的方法

 shake.removedOnCompletion = NO;

7:使用CAAnimation播放动画完后希望能适应新的坐标变化

[button.layer addAnimation:animationgroup forKey:@"Expand"];
button.center = CGPointMake(button.center.x, button.center.y);

在加入动画以后, 直接设定 动画结束时的坐标即可.



 类似资料:

相关阅读

相关文章

相关问答