调整UIView大小时的抗锯齿问题

调整UIView大小时的抗锯齿问题,uiview,resize,core-animation,calayer,antialiasing,Uiview,Resize,Core Animation,Calayer,Antialiasing,我的iPhone应用程序在纵向模式下显示轮子: 当它旋转到横向模式时,它会放大此控制盘的顶部象限: 我这样做的方法是创建一个UIView(边界:768 x 768)来容纳控制盘,然后: - (void) layoutSubviews { UIDeviceOrientation O = [UIDevice currentDevice].orientation; : [self repositionWheelTo: O]; } - (void) repositionWheelT

我的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的横向屏幕上,它的大小可以翻倍

因此,在iPhone人像中,您可以想象一个768x768的正方形延伸到实际的设备屏幕上,并且变换设置为按钮仅绘制在中间部分

可以说是浪费内存,但现在我正努力让代码易于管理,我找不到更好的方法来实现这一点,让我能够在纵向和横向之间平稳过渡

问题是,它在iPhone上看起来真的很糟糕。反走样就是不正常。您可以在Am中的a上看到清晰的楼梯效果,该效果在旋转到景观时消失


如何使控制盘在纵向模式下以可接受的质量进行渲染?

您遇到的问题与在另一个控制盘中遇到的问题相同,即在不引入锯齿的情况下无法缩放小于50%的图像(请参见限制部分)。在iPhone上的肖像案例中,您的比例因子
sc
为0.41666…,低于该阈值


在纵向(即更接近显示尺寸)时,可能在重新定位控制盘时,考虑切换到控制盘的低分辨率版本。如果您的控制盘是以编程方式绘制的,您可以通过在视图上设置
边界
而不是
变换
,并将视图的
内容模式
设置为
UIViewContentModeRedraw
,让UIKit为您触发重画。哇,我真的不知道!这解释了很多。。。谢谢!:)