2011-09-10 50 views
0

我的iPhone應用程序顯示在縱向模式下輪:
enter image description here抗鋸齒問題調整一個UIView

當旋轉爲橫向模式,它放大此車輪的頂部象限:
enter image description here

我這樣做的方法是創建一個UIView(範圍:768×768),以容納輪,那麼:

- (void) layoutSubviews 
{ 
    UIDeviceOrientation O = [UIDevice currentDevice].orientation; 
: 
    [self repositionWheelTo: O]; 
} 

- (void) repositionWheelTo: (UIDeviceOrientation) O 
{  
    BOOL is_L = UIInterfaceOrientationIsLandscape(O); 

    CGPoint centerPoint = CGPointFromPoint2D(centreOfRect(self.bounds)); 
    float sc = 320.0/768.0; 

    if(! isIPad() && is_L) 
    { 
     centerPoint.y += 200; 
     sc *= 2.0; 
    } 

    if(isIPad()) 
     sc = 1.0; 

    wvContainer.center = centerPoint; 
    wvContainer.transform = CGAffineTransformMakeScale(sc, sc); 
} 

這意味着它沒有w正確繪製適合整個輪子在iPad和iPhone-portrait的屏幕上,而在iPhone-landscape中它的尺寸加倍。

因此,在iPhone中,您可以想象一個圍繞實際設備屏幕延伸的768x768正方形,並且設置了變換以便按鈕僅被繪製到其中間部分。

可以說是浪費了內存,但現在我正試圖保持代碼的可管理性,我看不到更好的方式來做到這一點,這讓我在縱向和橫向之間順利過渡。

問題是,它看起來真的很糟糕的iPhone肖像。反走樣只是不正確。你可以看到在Am上的A會產生清晰的樓梯效果,當它旋轉到風景時會消失。

如何讓車輪在縱向模式下以可接受的質量進行渲染?

回答

2

您遇到了另一個questions about filtering中遇到的問題,即bilinear filtering無法在不引入別名的情況下縮放小於50%的圖片(請參閱限制部分)。在portrait-on-iPhone的情況下,您的比例因子sc爲0.41666 ...,低於該閾值。

考慮在縱向(即更接近匹配顯示尺寸)時切換到車輪的較低分辨率版本,可能在重新定位車輪時。如果您的輪子是以編程方式繪製的,則可以通過在視圖上設置bounds而不是transform並將視圖的contentMode設置爲UIViewContentModeRedraw來讓UIKit觸發重繪。

+0

哇,我真的不知道!它解釋了很多...謝謝! :) – Plot