2012-06-18 30 views
15

Trong thư mục tài nguyên iOS của tôi, tôi có những hình ảnh:NSBundle pathForResource: ofType: và UIImage imageWithContentsOfFile: quy mô xử lý và công cụ sửa đổi thiết bị như thế nào?

foo~iphone.png 
[email protected]~iphone.png 
foo~ipad.png 
[email protected]~ipad.png 

tôi tải chúng với:

NSString *fileName = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"png"]; 
UIImage *image = [UIImage imageWithContentsOfFile:fileName]; 

thực nghiệm:

Trên iPhone, filename/path/to/bundle/foo~iphone.png, và trên võng mạc iPhone, nó tải phiên bản @2x.

Trên iPad, filename/path/to/bundle/foo~ipad.png và trên iPad võng mạc, phiên bản này tải phiên bản @2x.

Tức là, nó tải hình ảnh tôi muốn, nhưng pathForResource xử lý công cụ sửa đổi thiết bị và imageWithContentsOfFile xử lý công cụ sửa đổi tỷ lệ.

Tôi muốn biết lý do. documentation của pathForResource không nói gì về công cụ sửa đổi thiết bị và documentation của imageWithContentsOfFile không nói gì về công cụ sửa đổi tỷ lệ.

Có tài liệu riêng biệt cho biết chính xác chức năng của từng chức năng không?

+0

giá trị gì là chuỗi fileName của bạn giữ khi bạn thiết lập một bp trên dòng UIImage? Nói cách khác làm thế nào để bạn biết quy mô đang xảy ra trong imageWithContentsOfFile? –

+0

@MarkM, như tôi đã nói, trên iPhone, 'filename' là'/path/đến/bundle/foo ~ iphone.png', vì vậy tôi biết nó chỉ nhận được tên của phiên bản không phải @ 2x.Khi tên này được đưa vào 'UIImage', tôi nhận được phiên bản có độ phân giải cao –

Trả lời

14

Lời giải thích cho imageWithContentsOfFile là trong related documentation, không phải trong tài liệu hướng dẫn UIImage bản thân:

Trên các thiết bị với màn hình độ phân giải cao, các imageNamed :, imageWithContentsOfFile :, và initWithContentsOfFile: phương pháp tự động tìm kiếm một phiên bản của hình ảnh được yêu cầu với bộ sửa đổi @ 2x trong tên của nó. Nếu nó tìm thấy một, nó tải hình ảnh đó để thay thế. Nếu bạn không cung cấp phiên bản có độ phân giải cao của một hình ảnh nhất định, đối tượng hình ảnh vẫn tải hình ảnh có độ phân giải tiêu chuẩn (nếu có) và chia tỷ lệ trong khi vẽ.

Khi tải hình ảnh, đối tượng UIImage tự động đặt thuộc tính kích thước và tỷ lệ thành giá trị thích hợp dựa trên hậu tố của tệp hình ảnh. Đối với hình ảnh có độ phân giải chuẩn, nó đặt thuộc tính tỷ lệ thành 1.0 và đặt kích thước của hình ảnh thành kích thước pixel của hình ảnh. Đối với hình ảnh có hậu tố @ 2x trong tên tệp, nó đặt thuộc tính tỷ lệ thành 2.0 và giảm một nửa giá trị chiều rộng và chiều cao để bù cho yếu tố tỷ lệ. Những giá trị này giảm một nửa tương quan chính xác với kích thước điểm dựa trên bạn cần phải sử dụng trong logic phối hợp không gian để làm cho hình ảnh."

Tôi không biết mà tài liệu giải thích hành vi của pathForResource.

+0

Vui lòng trích dẫn từ Tôi không thể để tìm bất cứ nơi nào trong tài liệu 'UIImage' tổng thể hoặc tài liệu' imageWithContentsOfFile' cụ thể nói về việc mở rộng quy mô. –

+0

Và tôi cũng quan tâm đến lý do tại sao 'pathForResource' xử lý công cụ sửa đổi thiết bị. –

+0

Câu trả lời của tôi đã được cập nhật để bao gồm các trích dẫn từ tài liệu nói về các phương pháp UIImage khác nhau và lý do các hành động của họ thực hiện những gì họ làm.Ngoài ra còn có cuộc thảo luận về công cụ sửa đổi thiết bị trong đó. Nếu bạn đang tìm kiếm thêm thông tin về điều này tôi sẽ giới thiệu các video WWDC khi họ cung cấp các ví dụ và thực hiện tất cả các kỹ thuật này. –