国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CAKeyframeAnimation

2019-11-09 17:10:46
字體:
來源:轉載
供稿:網友

CAKeyframeAnimation跟CABasicAnimation的區別是:CABasicAnimation只能從一個Value變到另一個Value,而CAKeyframeAnimation會將這些數值保存在數組中或者以路徑(path)形式保存.

另附代碼如下:

- (instancetype)initWithFrame:(CGRect)frame withSuperView:(UIView *)superView{    if (self = [super initWithFrame:frame]) {                self.superView = superView;        self.borderColor = [UIColor whiteColor];        self.fillColor = [UIColor colorWithRed:(arc4random_uniform(255))/255.0 green:(arc4random_uniform(255))/255.0 blue:(arc4random_uniform(255))/255.0 alpha:1];        self.backgroundColor = [UIColor clearColor];        self.layer.anchorPoint = CGPointMake(0.5, 1);    }    return self;}- (void)addAnimationView{    // 初始化    self.transform = CGAffineTransformMakeScale(0, 0);    self.alpha = 0;        [UIView animateWithDuration:0.5 delay:0.0 usingSPRingWithDamping:0.6 initialSpringVelocity:0.8 options:UIViewAnimationOptionCurveEaSEOut animations:^{        self.transform = CGAffineTransformIdentity;        self.alpha = 0.9;    } completion:^(BOOL finished) {            }];    // 隨機數    NSInteger i = arc4random_uniform(2);    NSInteger rotationDirection = 1 - (2*i);        // 繪制路徑    UIBezierPath *heartTravelPath = [UIBezierPath bezierPath];    [heartTravelPath moveToPoint:self.center];        CGPoint endPoint = CGPointMake(self.centerX + (rotationDirection) * arc4random_uniform(2*self.width), self.superView.height/6.0 + arc4random_uniform(self.superView.height/4.0));    CGFloat x = (self.width/2.0 + arc4random_uniform(2*self.width)) * rotationDirection;    CGFloat y = MAX(endPoint.y ,MAX(arc4random_uniform(8*self.width), self.width));    CGPoint controlPoint1 = CGPointMake(self.centerX + x, self.superView.height - y);    CGPoint controlPoint2 = CGPointMake(self.centerX - 2*x, y);        [heartTravelPath addCurveToPoint:endPoint controlPoint1:controlPoint1 controlPoint2:controlPoint2];        CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];    keyFrameAnimation.path = heartTravelPath.CGPath;    keyFrameAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];    keyFrameAnimation.duration = liveAnimationDuration + endPoint.y/self.superView.height;    [self.layer addAnimation:keyFrameAnimation forKey:@"positionOnPath"];        [UIView animateWithDuration:liveAnimationDuration animations:^{        self.alpha = 0.0;    } completion:^(BOOL finished) {        [self removeFromSuperview];    }];}- (void)drawRect:(CGRect)rect{        [self.fillColor setFill];    [self.borderColor setStroke];        CGFloat drawingPadding = 2.0;    CGFloat curveRadius = floor((CGRectGetWidth(rect) - 2*drawingPadding) / 4.0);        UIBezierPath *heartPath = [UIBezierPath bezierPath];        CGPoint tipLocation = CGPointMake(floor(CGRectGetWidth(rect) / 2.0), CGRectGetHeight(rect) - drawingPadding);    [heartPath moveToPoint:tipLocation];        CGPoint topLeftCurveStart = CGPointMake(drawingPadding, floor(CGRectGetHeight(rect) / 3));        [heartPath addQuadCurveToPoint:topLeftCurveStart controlPoint:CGPointMake(topLeftCurveStart.x, topLeftCurveStart.y + curveRadius)];        [heartPath addArcWithCenter:CGPointMake(topLeftCurveStart.x + curveRadius, topLeftCurveStart.y) radius:curveRadius startAngle:M_PI endAngle:0 clockwise:YES];        CGPoint topRightCurveStart = CGPointMake(topLeftCurveStart.x + 2*curveRadius, topLeftCurveStart.y);    [heartPath addArcWithCenter:CGPointMake(topRightCurveStart.x + curveRadius, topRightCurveStart.y) radius:curveRadius startAngle:M_PI endAngle:0 clockwise:YES];        CGPoint topRightCurveEnd = CGPointMake(topLeftCurveStart.x + 4*curveRadius, topRightCurveStart.y);    [heartPath addQuadCurveToPoint:tipLocation controlPoint:CGPointMake(topRightCurveEnd.x, topRightCurveEnd.y + curveRadius)];        [heartPath fill];        heartPath.lineWidth = 1;    heartPath.lineCapStyle = kCGLineCapRound;    heartPath.lineJoinStyle = kCGLineCapRound;    [heartPath stroke];}

注:

values:動畫移動的點

path:動畫移動路徑。path只對CALayer的anchorPoint和position起作用。path比values優先級高,所以如果path有值,那么values將被忽略.

keyTimes:為對應的關鍵幀設置對應的時間點(取值范圍為0到1.0),keyTimes中的每一個時間值都對應values中的每一幀.默認各個關鍵幀的時間是平分的.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汶川县| 依安县| 安远县| 洞头县| 左权县| 武城县| 连江县| 濮阳县| 林西县| 台北市| 潜山县| 凤翔县| 应用必备| 天津市| 扶沟县| 阜康市| 乌鲁木齐市| 绥江县| 民和| 平安县| 利辛县| 桓台县| 万全县| 辽宁省| 梨树县| 沙河市| 公安县| 伽师县| 东兰县| 石台县| 廉江市| 北川| 龙游县| 海门市| 绵竹市| 瑞丽市| 广水市| 樟树市| 响水县| 湾仔区| 麻城市|