我製作了一個具有許多UIView子類視圖的應用程序。這些視圖的大小和方向是隨機的,應用程序的屏幕狀態可以保存。當用戶將屏幕保存在與其打開的設備相同的設備上時,屏幕狀態爲OK。一切都定位正確。但是,如果用戶將屏幕狀態保存在iPhone上並從iPad打開,則視圖位置不正確。實際上視圖看起來更短或更長,中心似乎被正確保存,但視圖的旋轉和它們的大小(邊界屬性)不能正常工作。以編程方式將uiviews適用於iPad/iPhone屏幕
這些都是兩種方法保存和恢復視圖
- (void)encodeWithCoder:(NSCoder *)aCoder {
// Save the screen size of the device that the view was saved on
[aCoder encodeCGSize:self.gameView.bounds.size forKey:@"saveDeviceGameViewSize"];
// ****************
// ALL properties are saved in normalized coords
// ****************
// Save the center of the view
CGPoint normCenter = CGPointMake(self.center.x/self.gameView.bounds.size.width, self.center.y/self.gameView.bounds.size.height);
[aCoder encodeCGPoint:normCenter forKey:@"center"];
// I rely on view bounds NOT frame
CGRect normBounds = CGRectMake(0, 0, self.bounds.size.width/self.gameView.bounds.size.width, self.bounds.size.height/self.gameView.bounds.size.height);
[aCoder encodeCGRect:normBounds forKey:@"bounds"];
// Here I save the transformation of the view, it has ONLY rotation info, not translation or scalings
[aCoder encodeCGAffineTransform:self.transform forKey:@"transform"];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// Restore the screen size of the device that the view was saved on
saveDeviceGameViewSize = [aDecoder decodeCGSizeForKey:@"saveDeviceGameViewSize"];
// Adjust the view center
CGPoint tmpCenter = [aDecoder decodeCGPointForKey:@"center"];
tmpCenter.x *= self.gameView.bounds.size.width;
tmpCenter.y *= self.gameView.bounds.size.height;
self.center = tmpCenter;
// Restore the transform
self.transform = [aDecoder decodeCGAffineTransformForKey:@"transform"];
// Restore the bounds
CGRect tmpBounds = [aDecoder decodeCGRectForKey:@"bounds"];
CGFloat ratio = self.gameView.bounds.size.height/saveDeviceGameViewSize.height;
tmpBounds.size.width *= (saveDeviceGameViewSize.width * ratio);
tmpBounds.size.height *= self.gameView.bounds.size.height;
self.bounds = tmpBounds;
}
return self;
}
THX您的回覆但不幸的是它沒有工作做。當視圖保存在iPhone上並在iPad上打開時,它的元素在iPad屏幕的x軸上顯示得更短。在Y軸上沒有問題。當一個視圖保存在iPad上並在iPhone上打開時,會發生完全相反的情況。 – Summon 2012-08-10 15:30:41
不客氣,但我想解決您的問題:)您是否嘗試調試應用程序,並在保存/加載之前和之後檢查兩個設備上的值?也許這些值可以顯示他們有什麼問題。 – 2012-08-10 20:18:08
問題的根源在於當視圖旋轉時,將寬度除以屏幕寬度以正常化其大小是錯誤的,因爲寬度可能等於由於旋轉或寬度和高度的組合而造成的高度例如45度旋轉。而且,iPad的寬高比與iPhone不同,所以這是另一個需要擔心的問題。我希望看到成功處理這些問題的代碼。 – Summon 2012-08-11 06:16:33