Визуальные артефакты при вращении 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)


Почему бы не использовать изображение шаблона в качестве фонового «цвета»? Это автоматически приводит к мозаичному шаблону и позволяет избежать каких-либо трюков с 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

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

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

person gopikrishnan    schedule 05.10.2010