2011-10-14 94 views
0

我有一個非常簡單的UIView動畫,這導致我的觀點爲「悸動」:返回查看到原來的位置結束時的UIView動畫

[UIView animateWithDuration:0.2 delay:0.0f options:UIViewAnimationOptionAllowUserInteraction+UIViewAnimationOptionRepeat+UIViewAnimationOptionAutoreverse animations:^{ 
    CGAffineTransform transf = CGAffineTransformScale(self.view.transform, 1.05f, 1.05f); 
    [self.view setTransform:transf]; 
} completion:nil]; 

在一些點,用戶點擊一個按鈕,取消動畫,應用新的變換。

[self.view.layer removeAllAnimations]; 
[self.view setTransform:aNewTransform]; 

我希望它重置爲原始變換,但它的尺寸增加了5%。

編輯:我試着添加一個完成塊,將轉換重置到它的原始位置。這會起作用,但會導致我立即運行的變換被踐踏...完成塊在我應用aNewTransform後運行。

編輯2:我找到了一個解決方案,使用CABasicAnimation,而不是UIView動畫。如果有人找到使用UIView動畫的解決方案,我仍然會感興趣...我更喜歡基於塊的界面。這也僅適用於我,因爲我碰巧跟蹤了應用於視圖的範圍值和範圍值。改變規模使用的一切也改變self.scale

我更換動畫的方法:

CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
basicAnimation.toValue = [NSNumber numberWithFloat:self.scale*1.05f]; 
basicAnimation.fromValue = [NSNumber numberWithFloat:self.scale]; 
basicAnimation.autoreverses = YES; 
basicAnimation.duration = 0.2; 
basicAnimation.repeatCount = HUGE_VALF; 
[self.view.layer addAnimation:basicAnimation forKey:@"Throb"]; 

回答

0

嘗試把線

[self.view setTransform:aNewTransform]; 

在完成塊。

+0

將無法​​工作。 aNewTransform是假想的,可以是多種不同的轉換,具體取決於使用哪個按鈕。直到我刪除動畫纔會知道。 –

2

開始在現有視圖上一個新的動畫之前,如果有這些屬性的前面發生了改變可以重置視圖:

// first, don't forget to stop ongoing animations for the view 
[theView.layer removeAllAnimations]; 

// if the view was hidden 
theView.hidden = NO; 

// if you applied a transformation e.g. translate, scale, rotate..., reset to identity 
theView.transform = CGAffineTransformIdentity; 

// if you changed the anchor point, this will reset it to the center of the view 
theView.layer.anchorPoint = CGPointMake(0.5, 0.5); 

// if you changed the alpha, this will reset it to visible 
theView.alpha = 1.;