2009-11-01 20 views
0

我正在使用蘋果開發站點上的PageControl項目。我爲項目添加了翻轉視圖,並在每個視圖/頁面的右上角添加了一個信息圖標。出於某種原因,只有第一個頁面能夠對翻轉進行動畫製作。第二頁仍然顯示翻頁,但沒有動畫。爲了確保它對於頁面1沒有什麼特別之處,我切換頁面1和2並且工作正常。在位置1的頁面2動畫,而位置2的頁面1沒有。任何想法爲什麼會發生這種情況,或者我可以如何解決問題?爲什麼PageControl項目中沒有動畫?

我確實看看這個線程,這似乎是相同的問題:Flip View Iphone。不過,我的flipview是一個UIViewController,所以它上面有信息圖標的類。在另一個線程中,他們正在使用UIViews。

我確實從上述線程實現了showInfo代碼。在第2頁時,我看不到任何翻轉。然後我滾動到第1頁並看到它已翻轉。不知道爲什麼它不在第2頁。當在頁面1上時,它不會使翻頁產生動畫效果。 flipview突然出現。

回答

1

你有containerView嗎?有什麼可以在那裏,所以你可以添加和刪除它的子視圖?如果你有兩個viewController,動畫可能會中斷,一個來去一個,沒有一個containerView。我使用rootViewController並使用後面的rootViewcontroller將所有頁面彼此進行動畫化。這裏是我的代碼翻轉,你可能需要做一些編輯,使它爲你工作:

(請記住,自我是rootViewcontroller,一個視圖控制器與一個空白的視圖(顏色,所以它匹配你的看法))

- (void)switchTwoViews:(UIViewController *)view1 otherView:(UIViewController *)view2 
{ 
    /* 
    This method is called to switch views. 
    It flips the displayed view from the main view to the flipside view and vice-versa. 
    */ 

    UIViewController *coming = nil; 
    UIViewController *going = nil; 
    UIViewAnimationTransition transition; 

    [view1.view setUserInteractionEnabled: NO]; 
    [view2.view setUserInteractionEnabled: NO]; 
    if (view1.view.superview == nil) { 
     coming = view1; 
     going = view2; 
     transition = UIViewAnimationTransitionFlipFromLeft; 
    } 
    else { 
     coming = view2; 
     going = view1; 
     transition = UIViewAnimationTransitionFlipFromRight; 
    } 
     // in some cases the following is needed to size the view 
    // coming.view.frame = [UIScreen mainScreen].applicationFrame; 

    // going.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
    // coming.view.alpha = 0.0; 

    NSArray *viewArray = [[NSArray alloc] initWithObjects:coming, going, nil]; 
    [coming viewWillAppear:YES]; 
    [going viewWillDisappear:YES]; 
    [UIView beginAnimations:@"View Flip" context:viewArray]; { 
     [UIView setAnimationDuration:1.0]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationDidEnd:finished:context:)]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     //  coming.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
     //  going.view.alpha = 0.0; 

     [UIView setAnimationTransition:transition forView:self.view cache:YES]; 
     [self.view addSubview: coming.view]; 
    } 
    [UIView commitAnimations]; 

} 

- (void) animationDidEnd:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    NSArray *viewArray = context; 
    [((UIViewController *)[viewArray objectAtIndex:1]).view removeFromSuperview]; 
    [[viewArray objectAtIndex:1] viewDidDisappear:YES]; 
    [[viewArray objectAtIndex:0] viewDidAppear:YES]; 
    [[[viewArray objectAtIndex:0] view] setUserInteractionEnabled: YES]; 
    [viewArray release]; 
} 
+0

我有它現在翻轉除了當我回到父視圖。我從翻轉視圖[self.view removeFromSuperview]執行此操作。而你正在做這個[self.view addSubview:coming.view]。我的代碼導致它在返回到父級時不動畫。 – 4thSpace 2009-11-01 17:04:12

+0

我也無法使用animationDidEnd:代碼,因爲這會導致我的翻轉視圖消失。 – 4thSpace 2009-11-01 17:04:54

+0

如果您調用BeginAnimation而不是animationDidEnd,則beginAnimation之後的調用將排隊並且尚未發生。離開事情不是一個好狀態。 翻轉視圖時,會添加一個視圖,另一個視圖會被刪除。如果你不刪除它,那麼它就停留在你的視圖之後,並且你將會遇到問題(至少在上面的代碼中)。繼續玩這些例程,直到你知道發生了什麼。一旦你掌握了,你也可以找到其他方法來做到這一點。 – mahboudz 2009-11-01 17:42:08

相關問題