2013-10-25 17 views
19

Tôi muốn hiển thị biểu tượng ứng dụng bên trong ứng dụng của mình. Biểu tượng nằm trong danh mục tài sản mặc định (Images.xcassets).Tải biểu tượng ứng dụng từ xcassets

Làm cách nào để tải? Tôi đã thử những điều sau và tất cả đều trả lại nil:

image = [UIImage imageNamed:@"AppIcon"]; 
image = [UIImage imageNamed:@"icon"]; 
image = [UIImage imageNamed:@"icon-76"]; 
image = [UIImage imageNamed:@"icon-60"]; 

Hình ảnh khác trong danh mục tài sản hoạt động như mong đợi.

Trả lời

22

Bằng cách kiểm tra việc bó tôi thấy rằng những hình ảnh biểu tượng đã được đổi tên thành:

AppIcon76x76~ipad.png 
[email protected]~ipad.png 
[email protected] 

Và vân vân.

Do đó, sử dụng [UIImage imageNamed:@"AppIcon76x76"] hoặc các tác phẩm tương tự.

Tài liệu này có ở đâu đó không?

+1

Dường như có tài liệu ở đây: https://developer.apple.com/library/ios/qa/qa1686/_index.html –

+1

Việc này rất nguy hiểm. Apple có thể thay đổi quy ước đặt tên và phá vỡ ứng dụng của bạn trong tương lai. Đề xuất của tôi chỉ là sao chép một biểu tượng khác trong image.xcasset của bạn một cách riêng biệt. – GeneCode

13

Tôi khuyên bạn nên lấy URL biểu tượng bằng cách kiểm tra các Info.plist vì không có sự bảo đảm như thế nào các tập tin biểu tượng được đặt tên:

NSDictionary *infoPlist = [[NSBundle mainBundle] infoDictionary]; 
NSString *icon = [[infoPlist valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"] lastObject]; 
imageView.image = [UIImage imageNamed:icon]; 

Trong trường hợp này chúng tôi đang lấy URL hình ảnh cuối cùng của mảng CFBundleIconFiles. Nó có độ phân giải lớn nhất. Thay đổi điều này nếu bạn cần độ phân giải nhỏ hơn.

+0

Đề xuất thú vị. Nó sẽ được tốt đẹp để xác nhận nếu 'AppIcon' tên là công cộng API hay không. – hpique

+1

Trong trường hợp của tôi, các biểu tượng được đặt tên khác nhau. Vì vậy, tôi sẽ không hoàn toàn dựa vào tên. –

+1

tại sao không chỉ đơn giản là sau khi đã đặt "biểu tượng"? imageView.image = [UIImage imageNamed: icon]; –

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