2010-09-27 84 views
0

我有一個UIView,我希望改變視圖旋轉時的大小和位置。但是,我需要能夠以編程方式執行此操作,而不是使用佈局設置和自動調整。爲此,我試圖在設備旋轉並調用重繪時更改視圖的框架和邊界,但不管使用結果的變量的組合總是出錯。我根本無法弄清楚發生了什麼事情來搞定代碼,並且在這裏發佈的代碼太多了。有人可以給我任何提示或方法來實現這一點嗎?我只是不知道在哪裏看。自定義UIView旋轉問題

這是我使用了縱向佈局,其工作代碼:

clusterMap.frame = CGRectMake(0, self.view.frame.size.height/2, 
     self.view.frame.size.width, 
     self.view.frame.size.height/2); 
clusterMap.bounds = CGRectMake(-clusterMap.frame.size.width/2, 
     -clusterMap.frame.size.height/2, 
     clusterMap.frame.size.width, 
     clusterMap.frame.size.height); 
[clusterMap setNeedsDisplay]; 

但是當我嘗試使用此代碼與不同人物的改編版本,它只是顯示爲如果屏幕是肖像。如果我將這些數字轉換成一些肖像和一些景觀,會發生各種奇怪的事情。我可以描述的一個例子是,圖像可能會以適當的比例繪製,但會被剪裁到不正確的比例邊界。我已經嘗試了所有我能想到的數字組合,系統地在一次一個配對值之間交換寬度和高度,並且這些組合都不起作用。

回答

2

您需要使用他的控制器的willAnimateRotationToInterfaceOrientation來實現此目的。正如你所說,你必須改變自己的框架財產^^

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
} 

但是如果你需要更多的幫助,它可能是有用把一些片碼的^^

+0

嗯。我目前正在使用主應用程序的didRotate。會有真正的區別嗎? – Ash 2010-09-27 15:31:09

+0

您需要一個控制器來接收設備方向更改的事實。或者你可以嘗試設置通知,但它不是更好的方式^^ – Vinzius 2010-09-27 15:34:03

+0

對不起,我誤讀你。我應該說的是我使用UIDeviceOrientationDidChangeNotification來檢測設備旋轉。代碼肯定會觸發併發送我期望它發送的數據,但某處出現問題。 – Ash 2010-09-27 15:36:35