iOS 5.1: - [UIColor colorWithPatternImage:] цвет фона отображается сплошным черным - PullRequest
8 голосов
/ 08 марта 2012

При тестировании моего приложения в сегодняшнем выпуске iOS 5.1 GM я заметил, что некоторые из моих представлений отображаются сплошным черным, а не цветным узором.Тот же самый код прекрасно работает в предыдущих выпусках iOS (протестировано на 4.2 - 5.0.1).

См. Скриншоты: Screenshots of issue

Кто-нибудь еще испытывал это?Есть ли обходной путь?

Ответы [ 2 ]

12 голосов
/ 08 марта 2012

Отвечая на мой вопрос (мне потребовалось несколько дней, чтобы отладить это, так что, надеюсь, это сэкономит кому-то еще некоторое время;)):

Основная причина заключается в использовании шаблонного UIColor (через +[UIColor colorWithPatternImage:])в качестве цвета фона для UIView, который находится над UIImageView с тем же изображением.

Пример:

    UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage];
    [_containerView addSubview:imageView];

    UIColor *patternColor = [UIColor colorWithPatternImage:anImage];
    UIView  *patternView = [[UIView alloc] initWithFrame:frame];
    [patternView setBackgroundColor:patternColor];
    [_containerView addSubview:patternView];

Оба представления отображаются черным, и возникает проблема с кэшированием, когда все остальныеиспользование изображения становится черным до тех пор, пока приложение не будет приостановлено / возобновлено.

Я подал в Apple номер 10795514, чтобы сообщить об этом, но похоже, что он превратился в 5.1.Уменьшение этой проблемы доступно по адресу: http://iccir.com/public/radar/Radar10795514.zip

Единственный найденный мной обходной путь - это сглаживание иерархии видов и рисование изображения шаблона дважды в одном и том же виде.

0 голосов
/ 25 января 2013

У меня была эта проблема с iOS 5.1 на iPad, где я использовал colorWithPatternImage для UIScrollView следующим образом:

scrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YOURIMAGE.jpg"]];

Это работает в iOS 6 (например, iPad2 и более поздних версиях), однако на оригинальном iPad, где вы можете обновить iOS только до 5.1.1, будет отображаться белый или другой сплошной цвет, определенный вами где-то. Исправление заключается в использовании немного менее привлекательного метода, где вы устанавливаете backgroundView scrollView следующим образом:

scrollView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOURIMAGE.png"]];

Я проверял это в iOS 6 и iOS 5.1, поэтому оно также должно применяться к iPhone, если у вас там возникают проблемы.

...