Проблема сглаживания при изменении размера UIView - PullRequest
0 голосов
/ 10 сентября 2011

Приложение «Мой iPhone» отображает колесо в портретном режиме:
enter image description here

Когда он поворачивается в ландшафтный режим, он увеличивает верхний сектор этого колеса:
enter image description here

Способ, которым я делаю это, - создать 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-портрете это выглядит очень грязно. Сглаживание просто не работает правильно. Вы можете видеть эффект четкой лестницы на A в Am, который исчезает при повороте на ландшафт.

Как заставить рендеринг колеса с приемлемым качеством в портретном режиме?

1 Ответ

2 голосов
/ 12 сентября 2011

Вы столкнулись с той же проблемой, с которой столкнулись в одном из своих вопросов о фильтрации , а именно о том, что билинейная фильтрация не может масштабировать изображение менее 50% без введения псевдонимов (см. Раздел Ограничения). В случае портрета на iPhone ваш масштабный коэффициент sc равен 0,41666…, что ниже этого порога.

Подумайте о переключении на версию колеса с более низким разрешением, когда находитесь в портретной ориентации (т. Е. Более точно соответствует размеру дисплея), возможно, когда вы перемещаете колесо. Если ваше колесо нарисовано программно, вы можете получить UIKit для запуска перерисовки, установив bounds вместо transform на вашем виде и установив contentMode в UIViewContentModeRedraw.

.
...