2012-12-18 60 views
3

我的「庫」風格的UIViewController執行角度爲1.75弧度的CATransform3D旋轉動畫,以便在將動畫推送到下一個視圖或最後一個視圖之前隱藏它。不幸的是,在彈出UIViewController時執行動畫時,彈出的VC將不會響應觸摸。UIViewController在CATransform3D動畫後沒有響應觸摸

事情我已經嘗試: -

  • 爲了讓動畫彈出,而不是它不是在動畫後都顯示,我有.1秒鐘的延遲它。爲此,我使用NSObject的performSelector:withObject:afterDelay。不幸的是,在執行完美的動畫時,會導致我的名字問題。
  • 使用NSTimer在0.1秒後執行操作且不重複。這什麼都不做。
  • 要在動畫時使用UIView的延遲功能,這意味着不執行動畫。
  • 使用選擇器通過被他人引用來執行動畫。沒有效果。
  • 要在視圖沒有響應觸摸時調用touchesEnded,不起作用。

我當前的代碼,而有點邋遢(我第一次使用的Core Animation/QuartzCore的),是...

要彈出是否進行動畫。

//To collect it in the SecondVC 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(coolAnimation) name:@"ReturnSecond" object:nil]; 
//To send it from the ThirdVC 
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReturnSecond" object:nil]; 

爲了彈出VC

[[NSNotificationCenter defaultCenter] postNotificationName:@"ReturnWeird" object:nil]; 
NSUInteger integer = [[self.navigationController viewControllers] indexOfObject:self]; 
[[self navigationController] popToViewController:[[self.navigationController viewControllers] objectAtIndex:integer-1] animated:NO]; 

爲了呈現動畫

- (void)coolAnimation 
{ 
    [self performSelector:@selector(tryThis) withObject:nil afterDelay:0.1]; 
} 

- (void)tryThis 
{ 
    CGRect framer = self.view.layer.frame; 
    self.view.layer.anchorPoint = CGPointMake(0.f, 0.f); 
    self.view.layer.frame = framer; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    CATransform3D rotationAndPerspectiveTransforms = CATransform3DIdentity; 
    rotationAndPerspectiveTransforms.m34 = 1.0/500; 
    rotationAndPerspectiveTransforms = CATransform3DRotate(rotationAndPerspectiveTransforms, 0, 0, 1, 0); 
    self.view.layer.transform = rotationAndPerspectiveTransforms; 
    [UIView commitAnimations]; 

    CGRect framers = flippedCell.layer.frame; 
    flippedCell.layer.anchorPoint = CGPointMake(0.f, 0.f); 
    flippedCell.layer.frame = framers; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.7]; 
    CATransform3D rotateTransform = CATransform3DIdentity; 
    rotateTransform.m34 = 1.0/500; 
    rotateTransform = CATransform3DRotate(rotateTransform, 0, 0, 1, 0); 
    flippedCell.layer.transform = rotateTransform; 
    [UIView commitAnimations]; 

    [self performSelector:@selector(cellAnimationDidStop) withObject:nil afterDelay:0.7]; 
} 

- (void)cellAnimationDidStop 
{ 
    [self.tableView reloadData]; 
} 

該視圖被推動之前旋轉1.75弧度,因此將保留在該變換角度,直到它被旋轉背部。

我的代碼的任何提示也將不勝感激!

+0

縮進使代碼更容易閱讀。更容易閱讀代碼意味着更多的人會困擾你來幫助你。 –

+0

非常感謝。 – Giz

回答

1

經過3天的調試,我找到了答案。原來我最好用下面這行來刷新整個ViewController。內存很重,但它修復了一個巨大的bug。

[self becomeFirstResponder];