亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Objective-C-CABasicAnimation在動畫之后應用更改嗎?

Objective-C-CABasicAnimation在動畫之后應用更改嗎?

梵蒂岡之花 2019-12-13 09:36:39
我正在使用CABasicAnimation移動和調整圖像視圖的大小。我希望將圖像視圖添加到超級視圖中,進行動畫處理,然后從超級視圖中刪除。為了實現這一點,我正在監聽my的委托調用CAAnimationGroup,并在調用它后立即從超級視圖中刪除圖像視圖。問題在于,有時圖像在從超級視圖中刪除之前會在初始位置閃爍。避免這種行為的最佳方法是什么?CAAnimationGroup *animGroup = [CAAnimationGroup animation];    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, opacityAnim, nil];    animGroup.duration = .5;    animGroup.delegate = self;    [imageView.layer addAnimation:animGroup forKey:nil];
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

將動畫添加到圖層時,該動畫不會更改圖層的屬性。而是,系統創建該層的副本。原始層稱為模型層,副本層稱為表示層。表示層的屬性隨動畫的進行而變化,但是模型層的屬性保持不變。


刪除動畫時,系統將破壞表示層,僅保留模型層,然后模型層的屬性將控制該層的繪制方式。因此,如果模型層的屬性與表示層屬性的最終動畫值不匹配,則該層將立即重置為其在動畫之前的外觀。


要解決此問題,您需要將模型圖層的屬性設置為動畫的最終值,然后將動畫添加到圖層。您要按此順序進行操作,因為更改圖層屬性可以為該屬性添加隱式動畫,這將與您要顯式添加的動畫沖突。您要確保您的顯式動畫覆蓋隱式動畫。


那你怎么做這些呢?基本配方如下所示:


CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];

animation.fromValue = [NSValue valueWithCGPoint:myLayer.position];

layer.position = newPosition; // HERE I UPDATE THE MODEL LAYER'S PROPERTY

animation.toValue = [NSValue valueWithCGPoint:myLayer.position];

animation.duration = .5;

[myLayer addAnimation:animation forKey:animation.keyPath];

我沒有使用動畫組,所以我不完全知道您可能需要更改什么。我只是將每個動畫分別添加到圖層。


我還發現使用該+[CATransaction setCompletionBlock:]方法為一個或多個動畫設置完成處理程序比嘗試使用動畫的委托更容易。設置事務的完成塊,然后添加動畫:


[CATransaction begin]; {

    [CATransaction setCompletionBlock:^{

        [self.imageView removeFromSuperview];

    }];

    [self addPositionAnimation];

    [self addScaleAnimation];

    [self addOpacityAnimation];

} [CATransaction commit];


查看完整回答
反對 回復 2019-12-13
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

完成后,會自動刪除CAAnimations。有一個屬性removedOnCompletion對此進行控制。您應該將其設置為NO。

此外,還有一個名為的fillMode控件,可以控制動畫持續時間之前和之后的行為。這是在上聲明的屬性CAMediaTimingCAAnimation符合)。您應該將此設置為kCAFillModeForwards

通過這兩個更改,動畫應在完成后繼續存在。但是,我不知道您是否需要在組中或在組中的單個動畫上或同時在兩者上進行更改。


查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 711 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號