Визуальные артефакты при вращении UIView с мозаичным фоновым изображением

У меня есть приложение для iPad со стандартной настройкой UIViewController/UIView — разрешены все повороты. UIView рисует мозаичное изображение в качестве фона (плитка 256*256 пикселей):

- (void)drawRect:(CGRect)rect
{
    [[UIImage imageNamed: @"Background.png"] drawAsPatternInRect: rect];
}

Когда я поворачиваю свой iPad, я вижу, что во время поворота шаблон изображения исходной ориентации масштабируется в соответствии с новой ориентацией. Затем — сразу после завершения анимации — представление перерисовывает свой фоновый узор с окончательной конфигурацией, которая не масштабируется. Переключение с масштабированного на немасштабированный паттерн выглядит немного некрасиво.

Есть ли способ обойти (или скрыть) это растяжение фонового рисунка?


person Halbanonym    schedule 13.06.2010    source источник


Ответы (2)


arrow_upward
2
arrow_downward

Почему бы не использовать изображение шаблона в качестве фонового «цвета»? Это автоматически приводит к мозаичному шаблону и позволяет избежать каких-либо трюков с drawRect(). Например:

UIImage *backgroundTile = [UIImage imageNamed: @"Background.png"];
UIColor *backgroundPattern = [[UIColor alloc] initWithPatternImage:backgroundTile];
[myView setBackgroundColor:backgroundPattern];
[backgroundPattern release];
person roskakori    schedule 22.06.2010
comment
Я попробую ваше решение, но я также сам придумал решение: когда я отмечаю вид для перерисовки с помощью setNeedsDisplay в методе viewController willRotateToInterfaceOrientation:duration, вид будет перерисован сразу после поворота iPad, но до поворота анимация сделана. Это означает, что фоновое изображение растягивается в начале анимации и плавно растягивается во время анимации. Это уже не заметно для человеческого глаза. - person Halbanonym; 15.07.2010

arrow_upward
2
arrow_downward

проще говоря,

[myView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed: @"Background.png"] ]];

person gopikrishnan    schedule 05.10.2010