我的iPhone应用程序以纵向模式显示轮子:
当它旋转到横向模式时,它会放大此滚轮的顶部象限:
我这样做的方法是创建一个UIView(界限:768 x 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 );
}
这意味着它现在可以正确地绘制以适应iPad和iPhone纵向屏幕内的整个滚轮,并且在iPhone-landscape上它的尺寸增加了一倍。
因此,在iPhone肖像中,您可以想象一个768x768的方形,它围绕实际的设备屏幕延伸,并且设置了变换,以便按钮只被绘制到它的中间部分。
可以说是浪费了内存,但是现在我正在努力保持代码的可管理性,而且我看不到更好的方法,这让我可以在纵向和横向之间平滑过渡。
问题是,它在iPhone肖像上看起来真的很糟糕。抗锯齿只是不正常。你可以看到A中Am的清晰阶梯效果,当它旋转到风景时会消失。
如何在纵向模式下以可接受的质量渲染滚轮?
答案 0 :(得分:2)
您遇到了另一个questions about filtering中遇到的问题,即bilinear filtering无法在不引入别名的情况下缩放小于50%的图像(请参阅“限制”部分)。在iPhone上的纵向情况下,您的比例因子sc
为0.41666 ...,低于该阈值。
考虑在纵向(即更接近显示尺寸)时切换到车轮的低分辨率版本,可能是在重新定位车轮时。如果以编程方式绘制轮子,则可以通过在视图上设置bounds
而不是transform
并将视图的contentMode
设置为{{1}来让UIKit为您触发重绘}}