iOS CAKeyframeAnimation關鍵幀動畫

- (void)viewDidLoad {

? ? [super viewDidLoad];

? ? _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(90, 90, 30, 30)];

? ? _imageView.image= [UIImageimageNamed:@"011.png"];

? ? [self.viewaddSubview:_imageView];

}

//長按圖片抖動效果的實現(xiàn)

- (IBAction)longPressAction:(id)sender {

? ? UILongPressGestureRecognizer *press = (UILongPressGestureRecognizer *) sender;

? ? if (press.state == UIGestureRecognizerStateBegan? ) {

? ? ? ? CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

? ? ? ? keyFrameAnimation.duration=0.1;

? ? ? ? keyFrameAnimation.repeatCount=MAXFLOAT;

? ? ? ? keyFrameAnimation.autoreverses=YES;


? ? ? ? CGFloat? angle? =? M_PI_4/8;


? ? ? ? keyFrameAnimation.values=@[@(angle),@(-angle)];


? ? ? ? UIImageView*imageView = (UIImageView*)press.view;


? ? ? ? [imageView.layer? addAnimation:keyFrameAnimationforKey:nil];

? ? }

}

//點擊開始時調用

- (void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event{

?CGPoint? p =? [[touchesanyObject]locationInView:self.view];

? ? [self moveAnimation:p];

? ? [self movePathArc:p];

? ? [self movePathStroke:p];

}

//曲線路徑運動

-(void)movePathStroke:(CGPoint)point{

? ? CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

? ? CGMutablePathRef path = CGPathCreateMutable();

? ? CGPathMoveToPoint(path,NULL, point.x? , point.y);

//? ? CGPathAddCurveToPoint(path, NULL, 20, 200, 120, 20, 300, 200);

//? ? CGPathAddCurveToPoint(path, NULL, 120, 190, 30, 320, 150, 200);

//? ? CGPoint p1 = [self creatPoint];

//? ? CGPoint p2 = [self creatPoint];

//? ?

//? ? CGPathAddQuadCurveToPoint(path, NULL, p1.x, p1.y, p2.x, p2.y);

?? ? CGPathAddQuadCurveToPoint(path, NULL, 10, 300, 300, 0);

? ? keyFrameAnimation.duration=3;

? ? keyFrameAnimation.repeatCount=MAXFLOAT;

? ? keyFrameAnimation.autoreverses=YES;

? ? keyFrameAnimation.path= path;

? ? [_imageView.layeraddAnimation:keyFrameAnimationforKey:nil];

? ? CGPathRelease(path);


}

//點擊后以點擊的點為圓形轉動

-(void)movePathArc:(CGPoint)point {


? ? CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];


? ? CGMutablePathRef path = CGPathCreateMutable();


? ? CGPathAddArc(path,NULL, point.x, point.y,100,0,M_PI*2,0);


? ? keyFrameAnimation.duration=2;

? ? keyFrameAnimation.repeatCount=MAXFLOAT;


? ? keyFrameAnimation.path= path;


? ? [_imageView.layeraddAnimation:keyFrameAnimationforKey:nil];


? ? CGPathRelease(path);



}

//生成隨機點的方法

-(CGPoint)creatPoint{


? ? NSInteger x = arc4random_uniform(KScreenWidth);

? ? NSInteger y = arc4random_uniform(KScreenHeight);


? ? CGPointpoint =CGPointMake(x, y);


? ? returnpoint;


}

//移動動畫

-(void)moveAnimation:(CGPoint)point{


//? ? CAKeyframeAnimation *animation = (CAKeyframeAnimation *)[_imageView.layer animationForKey:@"keyFrame"];


?? ? CAKeyframeAnimation? * keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];


? ? //? ? CGPoint p1 = CGPointMake(30, 30);

? ? //? ? CGPoint p2 = CGPointMake(370, 10);

? ? //? ? NSValue *value1 = [NSValue valueWithCGPoint:p1];

? ? //? ? NSValue *value3 = [NSValue valueWithCGPoint:p2];

? ? NSValue*value2 = [NSValuevalueWithCGPoint:point];


? ? //將之前創(chuàng)建的點移除,每次點擊的時候只有21個點


? ? NSMutableArray *_data = [[NSMutableArray alloc] init ];


? ? ? ? for(inti =0; i <20;? i ++) {




? ? ? ? ? ? CGPointp = [selfcreatPoint];


? ? ? ? ? ? NSValue*value = [NSValuevalueWithCGPoint:p];


? ? ? ? ? ? [_dataaddObject:value];

? ? ? ? }



? ? //停留在點擊的位置

? ? keyFrameAnimation.removedOnCompletion=NO;


? ? keyFrameAnimation.fillMode=? kCAFillModeForwards;

? ? //動畫時間

? ? keyFrameAnimation.duration=5;


? ? //添加元素,點擊的點

? ? [_dataaddObject:value2];


? ? keyFrameAnimation.values= _data;


? ? [_imageView.layer? addAnimation:keyFrameAnimationforKey:@"keyFrame"];



}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拨拓,一起剝皮案震驚了整個濱河市伞剑,隨后出現(xiàn)的幾起案子遂庄,更是在濱河造成了極大的恐慌愁溜,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件企蹭,死亡現(xiàn)場離奇詭異服球,居然都是意外死亡劝篷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門通今,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粥谬,“玉大人,你說我怎么就攤上這事辫塌÷┎撸” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵璃氢,是天一觀的道長哟玷。 經(jīng)常有香客問我,道長一也,這世上最難降的妖魔是什么巢寡? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮椰苟,結果婚禮上抑月,老公的妹妹穿的比我還像新娘。我一直安慰自己舆蝴,他們只是感情好谦絮,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洁仗,像睡著了一般层皱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赠潦,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天叫胖,我揣著相機與錄音,去河邊找鬼她奥。 笑死瓮增,一個胖子當著我的面吹牛,可吹牛的內容都是我干的哩俭。 我是一名探鬼主播绷跑,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凡资!你這毒婦竟也來了砸捏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎带膜,沒想到半個月后吩谦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡膝藕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年式廷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芭挽。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡滑废,死狀恐怖,靈堂內的尸體忽然破棺而出袜爪,到底是詐尸還是另有隱情蠕趁,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布辛馆,位于F島的核電站俺陋,受9級特大地震影響,放射性物質發(fā)生泄漏昙篙。R本人自食惡果不足惜腊状,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苔可。 院中可真熱鬧缴挖,春花似錦、人聲如沸焚辅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽同蜻。三九已至棚点,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間湾蔓,已是汗流浹背瘫析。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卵蛉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓么库,卻偏偏與公主長得像傻丝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诉儒,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容