2014-05-09 43 views
1

我對我的UIView動畫有惱人的問題。基本上我通過跟隨手指位置來做一個UIView旋轉動畫。當視圖完全加載時,一切正常,但如果用戶在從我的Web服務傳入新數據(視圖內容)時拖動手指,則視圖從屏幕跳出。當用戶滾動一下時,視圖跳回到它的位置,一切都很好。那麼我能做些什麼來防止這種跳躍。UIPangesture <--> UIView動畫故障

我認爲傳入的數據觸發類似layoutIfNeeded,這會影響動畫位置。 另一個想法是它與我的autoLayout約束衝突。

動畫像這樣做:

- (IBAction)handlePan:(UIPanGestureRecognizer *)gesture { 

    UIView *currentView = self.viewToAnimate; 

    CGPoint translation = [gesture translationInView:gesture.view.superview]; 
    CGFloat percent = translation.x/gesture.view.bounds.size.width; 

    CATransform3D transform = CATransform3DIdentity; 
    transform.m34 = 1.0/-800; 
    currentView.layer.transform = 
     CATransform3DRotate(transform, M_PI * percent, 0.0, 1.0, 0.0); 

     //Snap back if the users lifts his finger 
    if (gesture.state == UIGestureRecognizerStateEnded || 
     gesture.state == UIGestureRecognizerStateCancelled || 
     gesture.state == UIGestureRecognizerStateFailed) { 

    [UIView animateWithDuration:0.45 
     delay:0.0 
     options:UIViewAnimationOptionCurveEaseInOut 
     animations:^{ currentView.transform = CGAffineTransformIdentity; } 
     completion:nil]; 
    } 
} 
+0

你可以嘗試停止視圖上的動畫,以防他們是罪魁禍首。你可以用'[currentView.layer removeAllAnimations]'來做到這一點。 –

回答

0

我設法讓它與[self.viewToAnimate setTranslatesAutoresizingMaskIntoConstraints:YES];一起工作。

我認爲我的約束在加載期間重新定位視圖,因爲視圖正在增長。降低IB中的約束優先級並將translatesAutoresizingMaskIntoConstraints設置爲YES後,所有內容都按預期工作。

0

有路你在做什麼,如何直接解決這個問題的信息太少。這些觀點是什麼類型的,你是否以編程方式生成視圖...

最有可能發生的是2場景之一。

首先,視圖本身調用self來刷新,在這種情況下,它設置其變換ti身份。如果是這種情況,您只需將此視圖添加到另一個超級視圖,然後將轉換應用於該超級視圖,而不是視圖本身。

第二種可能性是superview正在調用視圖來重新定位。在這種情況下,您可能希望通過在其中一個視圖上設置一些參數來中斷此類操作,以停止自動執行操作或嘗試分析此調用的來源。

要分析調用此視圖重新定位什麼,我建議你繼承你的視圖,如果需要的話,甚至可以覆蓋圖層,並覆蓋方法,如setFramesetTransform,並在那裏添加斷點。

+0

感謝您的回覆。我設法使用'[self.viewToAnimate setTranslatesAutoresizingMaskIntoConstraints:YES];''工作。我認爲我的約束在加載過程中重新定位了視圖,因爲視圖正在增長。在減少IB中的約束優先級並將'translatesAutoresizingMaskIntoConstraints'設置爲YES之後,所有事情都按預期工作。 – Daniel