2016-04-14 13 views
8

Tôi đang cố tìm hiểu PPI (Pixels Per Inch) trong iOS.Cách tìm PPI theo chương trình với độ chính xác

tôi không thể tìm thấy bất kỳ cách trực tiếp để truy vấn này như chúng ta làm cho kích thước hiển thị

UIScreen.mainScreen().bounds 

Có một way to do it bằng cách nhân quy mô với PPI generic tiêu chuẩn cho iPhone (163) hoặc iPad (132) nhưng nó không chính xác.

Nếu công thức là đúng rồi PPI của iPhone 6 cộng là 489 nhưng trong thực tế các PPI là 401 Đây là reference

Còn bây giờ nó có vẻ như hardcoding là con đường để đi.

Nhưng tôi muốn làm điều đó theo chương trình bằng cách sử dụng công thức.

Trả lời

2

Tôi tin rằng không có API công khai để nhận PPI hoặc kích thước thực của màn hình.

Cách duy nhất là mã hóa danh sách các thiết bị có kích thước vật lý và/hoặc PPI (và bạn có thể loại thiết bị ra khỏi lớp UIDevice).

BTW. Đây là câu hỏi khá nhiều yêu cầu cùng một điều (cách khác nhau): How do ruler apps stay accurate on all devices?

+0

Tôi đoán chúng ta có thể kích thước vật lý của màn hình tại các điểm '[UIScreen mainScreen] .bounds.size' nhưng có thể tìm thấy bao nhiêu điểm ảnh cho mỗi thiết bị ngoại trừ iPhone 6 plus vì nó không thể được phát hiện như quy mô PPI * bình thường vì iPhone 6 plus & iPhone 6s plus đã giới thiệu Màn hình mới có tên Retina HD ... vì vậy tôi nghĩ cách tốt nhất sẽ được kiểm tra nếu thiết bị là iPhone 6 cộng với sau đó trả về 4 01 và cho phần còn lại của thiết bị, chúng tôi có thể tiếp tục với công thức tôi đoán ... –

+0

Cách phát hiện iPhone 6 & iPhone 6s theo lập trình (http://stackoverflow.com/a/26400686/730807) –

2

Tôi vừa mới chuyển và cập nhật một trong các thư viện cũ của mình sang Swift. Bạn có thể sử dụng nó hoặc lấy các phần của mã bạn cần. Tải xuống tại đây: https://github.com/marchv/UIScreenExtension.

Thư viện sử dụng UIScreen.main.nativeScale để chuyển đổi từ Pixels Per Inch (PPI) thành Points Per Inch.

Cài đặt thư viện sử dụng Cocoapods và sau đó import nó:

import UIScreenExtension 

Và sau đó hãy sử dụng nó:

if let pointsPerCentimeter = UIScreen.pointsPerCentimeter { 
    // code 
} 
+1

Điều đáng nói đề cập đến UIScreenExtension misreports PPI cho iPad 2 và iPad Mini thế hệ thứ nhất. Đây là lần lượt là 132 và 163 vì hai thiết bị này không phải là @ 2x võng mạc. –

+0

@step_jac Lần đầu tiên tôi hiểu lầm bạn nhận xét - tốt hơn nên uống một ít cà phê trước khi đọc sớm vào buổi sáng: D OK Tôi có thể thấy vấn đề bây giờ - sẽ khắc phục nó càng sớm càng tốt - cảm ơn vì đã chỉ ra nó –

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