2012-05-02 48 views
4

背景:我想動畫我的內容隨着方向的變化。我的內容位置是相對於self.view.boundsiOS:取向取得未來self.view.bounds

問題:爲了使內容和邊界一起動畫,我需要知道視圖的邊界到底是什麼。我可以硬編碼,但我希望找到一個更有活力的方式。

代碼:因此,所有的動畫發生在willRotateToInterfaceOrientation按如下:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    //centering the image 
    imageView.frame = CGRectMake(self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2 , self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2, image.size.width, image.size.height); 
    NSLog(@"%d",[[UIDevice currentDevice] orientation]); 
    NSLog(@"%f", self.view.bounds.origin.x); 
    NSLog(@"%f", self.view.bounds.origin.y); 
    NSLog(@"%f", self.view.bounds.size.width); 
    NSLog(@"%f", self.view.bounds.size.height); 

} 

的邊界是方向變化之前。因此,這隻適用於轉換180度的情況。如果我要使用didRotateFromInterfaceOrientation,動畫將的方向變化看起來很糟糕。

回答

11

使用willAnimateRotationToInterfaceOrientation:duration:,而不是做什麼。此方法在旋轉動畫塊內被調用,並且此時所有邊界都已正確設置。 Docs.

+1

不知道存在:)謝謝。 – Byte

+0

啊......一直在尋找這個很長一段時間。謝謝! –

1

如果你想它的動態,然後當你初始化的ImageView,設置autoresizingMask屬性,這樣當的ImageView上海華上旋轉調整大小,邊距可以自動調整自己......

imageView = //init imageView 
imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; 
//addtional config 

這意味着你只需要設置一次框架然後imageView將始終調整自己,以保持在中間。

退房UIView類參考http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/uiview/uiview.html看到你可以用autoresizingMask屬性

+0

+1是個好主意。我將不得不去回答上面的問題,因爲它實際上是我正在尋找的。謝謝! – Byte

0

如果我正確理解你,你只需要在你CGRectMake交換的X/Y座標和寬度/高度,讓你的未來佈局了90度的轉變。如果它是180度變化,那麼它與當前相同

CGRectMake(self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2 , self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2, image.size.height, image.size.width); 
+0

謝謝,但這是相當黑客。因爲那樣你將不得不處理180度翻轉等等,不是很值得。謝謝你的想法。 – Byte

+0

肯定是黑客,但黑客有地方去。如果您在截止日期之前,則谷歌上的時間超過一小時 – JoeCortopassi