2012-10-04 32 views
12

Hãy nói rằng tôi có ba hình ảnh trong một bó hoặc tài sản Danh mục:UIImage imageNamed: không tự động chọn võng mạc @ hình ảnh 2x

  1. Mặc định ~ iphone.png
  2. [email protected]~iphone.png
  3. [email protected]

Trên iOS 4 và sau đó, các nhà xây dựng UIImage có thể lấy tên hình ảnh như sau:

[UIImage imageNamed:@"Default"]; 

Khi tôi đang ở trên màn hình hiển thị võng mạc 3,5 inch (iphone), nó sẽ tự động chọn hình ảnh (2). Nếu trên màn hình không phải võng mạc, nó sẽ chọn (1). Điều đó thật tuyệt.

Tôi đặt tên hình ảnh 3 như được chỉ định cho hình ảnh khởi động võng mạc 4 inch (iPhone 5). Có cách nào để đặt tên hình ảnh (3), để khi tôi đang chạy trên một màn hình võng mạc 4 inch, nó được trả lại với cùng một nhà xây dựng UIImage?

Có lẽ điều này chưa được triển khai hoặc tôi mong đợi quá nhiều từ sự tiện lợi ... Tôi chỉ cố gắng tránh bất kỳ logic điều kiện nào trong mã của tôi để chọn hình ảnh dựa trên kích thước màn hình.

Trả lời

12

Tôi cũng gặp vấn đề tương tự và hóa ra là không có hành vi nào như vậy đối với iPhone 5/iPod Touch thế hệ thứ 5

Bạn phải tự xác định xem ứng dụng của bạn có đang chạy trên thiết bị như vậy không và thay đổi tên tệp tương ứng.

Tôi đã sử dụng phương pháp này để kiểm tra xem ứng dụng của tôi đang chạy trên một chiếc iPhone 5/iPod Touch 5th Gen .:

#define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && [UIScreen mainScreen].scale == 2.f && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

Sau đó, bạn có thể điều chỉnh tên hình ảnh như thế này:

if(IS_PHONEPOD5()) { 
    myImageView.image = [UIImage imageNamed:@"MyImage-568h.png"]; 
} else { 
    myImageView.image = [UIImage imageNamed:@"MyImage.png"]; 
} 

Cập nhật
Tôi cũng tìm thấy danh mục UII trên Github (Link) triển khai thực hiện những gì bạn đang tìm kiếm. Nó không có một dự phòng cho các tập tin không tồn tại, nhưng bạn có thể thực hiện nó một cách dễ dàng một mình.

+0

+1 Đây là một loại tuyệt vời. Cảm ơn các liên kết. Về mặt kỹ thuật, tuy nhiên, nó đã có một dự phòng cho các hình ảnh không tồn tại - nó chỉ trả về phương thức 'UIImage imageNamed: 'với bất kỳ chuỗi tên gốc nào được truyền vào. Điều này có ý nghĩa với tôi như là hành vi mong muốn trong các trường hợp như vậy. –

+0

Đó là những gì tôi nghĩ. Tôi đã tạo ra một danh mục UIImage tương tự. – JoelF

2

Không có loại hình ảnh 4 "Điều duy nhất khác với mọi thứ khác là bao gồm Default-[email protected] được sử dụng làm hình ảnh khởi chạy cho iPhone 5 và báo hiệu hệ điều hành rằng ứng dụng của bạn hỗ trợ màn hình dài hơn và không nên Không phải là hộp thư,

Bạn phải xử lý mã hoặc tự động trả lời với kích thước màn hình khác nhau.Không có loại hình ảnh tự động đặc biệt. Loại hình ảnh màn hình tiêu chuẩn hoặc loại hình ảnh võng mạc, giống như kể từ iOS 4.

0

API mới trong iOS 8 cho phép bạn tải phiên bản võng mạc của một hình ảnh được đặt tên, trước đó bạn phải xác định tên tập tin bản thân:

UIImage* retinaImage = [UIImage imageNamed:@"ImageName" 
    inBundle:nil compatibleWithTraitCollection:nil]; 

NSLog(@"screen scale: %2.2f retinaImage: %@", 
    [UIScreen mainScreen].nativeScale, retinaImage); 
Các vấn đề liên quan