iOS類似心跳的動畫縮放

jopen 10年前發布 | 6K 次閱讀 Objective-C IOS

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

UIView  *view =[[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

view.backgroundColor =[UIColor redColor];

[self.view addSubview:view];

[self heartbeatView:view duration:100];

}

-(void)heartbeatView:(UIView *)view duration:(CGFloat)fDuration

{

[[self class] heartbeatView:view duration:fDuration maxSize:1.4f durationPerBeat:0.5f];

}

+(void)heartbeatView:(UIView *)view duration:(CGFloat)fDuration maxSize:(CGFloat)fMaxSize durationPerBeat:(CGFloat)fDurationPerBeat

{

if (view && (fDurationPerBeat > 0.1f))

{

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];



    CATransform3D scale1 = CATransform3DMakeScale(0.8, 0.8, 1);

    CATransform3D scale2 = CATransform3DMakeScale(fMaxSize, fMaxSize, 1);

    CATransform3D scale3 = CATransform3DMakeScale(fMaxSize - 0.3f, fMaxSize - 0.3f, 1);

    CATransform3D scale4 = CATransform3DMakeScale(1.0, 1.0, 1);



    NSArray *frameValues = [NSArray arrayWithObjects:

                            [NSValue valueWithCATransform3D:scale1],

                            [NSValue valueWithCATransform3D:scale2],

                            [NSValue valueWithCATransform3D:scale3],

                            [NSValue valueWithCATransform3D:scale4],

                            nil];



    [animation setValues:frameValues];



    NSArray *frameTimes = [NSArray arrayWithObjects:

                           [NSNumber numberWithFloat:0.05],

                           [NSNumber numberWithFloat:0.2],

                           [NSNumber numberWithFloat:0.6],

                           [NSNumber numberWithFloat:1.0],

                           nil];

    [animation setKeyTimes:frameTimes];



    animation.fillMode = kCAFillModeForwards;

    animation.duration = fDurationPerBeat;

    animation.repeatCount = fDuration/fDurationPerBeat;



    [view.layer addAnimation:animation forKey:@"heartbeatView"];

}else{}

}

</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!