2012-03-07 51 views
8

Khi thử nghiệm ứng dụng của tôi trong phiên bản iOS 5.1 GM ngày hôm nay, tôi nhận thấy rằng một số chế độ xem của tôi đang vẽ màu đen đặc hơn là màu nền hoa văn của chúng. Mã giống hệt nhau hoạt động tốt trên các bản phát hành iOS trước đó (được thử nghiệm trên 4.2 - 5.0.1).iOS 5.1: - [Màu UIColorWithPatternImage:] màu nền vẽ màu đen rắn

Xem ảnh chụp màn hình: Screenshots of issue

Có ai khác có kinh nghiệm này? Có cách giải quyết nào không?

Trả lời

12

Trả lời câu hỏi của riêng tôi (nó đã cho tôi một vài ngày để gỡ lỗi này, vì vậy hy vọng điều này giúp tiết kiệm của người khác một thời gian;)):

Nguyên nhân sâu xa liên quan đến việc sử dụng một UIColor khuôn mẫu (thông qua +[UIColor colorWithPatternImage:]) như là một nền màu trên UIView phía trên UIImageView với cùng một hình ảnh.

Ví dụ:

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]; 

Cả hai quan điểm vẽ màu đen, và dường như có một vấn đề bộ nhớ đệm nơi mà tất cả các ứng dụng khác của hình ảnh thu hút đen đến khi ứng dụng bị đình chỉ/tiếp tục.

Tôi đã gửi sự cố # 10795514 với Apple để báo cáo vấn đề này, nhưng có vẻ như nó đã biến nó thành 5.1. Việc giảm sự cố này có sẵn tại: http://iccir.com/public/radar/Radar10795514.zip

Cách giải quyết duy nhất tôi tìm thấy là làm phẳng cấu trúc phân cấp và vẽ hình mẫu hai lần trong cùng một chế độ xem.

+1

+1 - Cảm ơn bạn đã chia sẻ! – Till

+0

Vấn đề thực sự là colorWithPatternImage không áp dụng cho UIImageView trong ios5, bạn nên sử dụng UIView rõ ràng .... – anders

0

Tôi đã có vấn đề này với iOS 5.1 trên iPad mà tôi đã sử dụng colorWithPatternImage trên UIScrollView như thế này:

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

này hoạt động trong iOS 6 (ví dụ iPad2 và xa hơn nữa), tuy nhiên, trên một gốc iPad, nơi bạn chỉ có thể cập nhật iOS của bạn lên 5.1.1, điều này sẽ hiển thị màu trắng hoặc màu khác mà bạn đã xác định ở đâu đó. Việc sửa chữa là sử dụng một phương pháp ít hấp dẫn hơn khi bạn đặt backgroundView của scrollView như thế này:

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

Tôi đã thử nghiệm điều này trong iOS 6 và iOS 5.1, vì vậy nó cũng nên áp dụng cho iPhone nếu bạn đang chạy vào các vấn đề ở đó.

Các vấn đề liên quan