ในแอพ iPhone ขณะเรียกใช้แอพบนอุปกรณ์จะตรวจจับความละเอียดหน้าจอของอุปกรณ์ที่แอพใดกำลังทำงานอยู่ได้อย่างไร
ในแอพ iPhone ขณะเรียกใช้แอพบนอุปกรณ์จะตรวจจับความละเอียดหน้าจอของอุปกรณ์ที่แอพใดกำลังทำงานอยู่ได้อย่างไร
คำตอบ:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
ซึ่งจะให้ความละเอียดของหน้าจอเป็นจุด ๆ ดังนั้นโดยทั่วไปแล้วจะเป็น 320x480 สำหรับ iPhone แม้ว่า iPhone4 จะมีขนาดหน้าจอที่ใหญ่กว่ามาก iOS ก็ยังให้กลับ 320x480 แทนที่จะเป็น 640x960 ส่วนใหญ่เป็นเพราะแอปพลิเคชันรุ่นเก่าทำลาย
CGFloat screenScale = [[UIScreen mainScreen] scale];
ซึ่งจะทำให้คุณได้ขนาดของหน้าจอ สำหรับอุปกรณ์ทั้งหมดที่ไม่มีจอแสดงผล Retina จะส่งคืน 1.0f ในขณะที่อุปกรณ์ Retina Display จะให้ 2.0f และ iPhone 6 Plus (Retina HD) จะให้ 3.0f
ตอนนี้หากคุณต้องการรับความกว้างและความสูงของพิกเซลของหน้าจออุปกรณ์ iOS คุณก็ต้องทำสิ่งง่ายๆเพียงอย่างเดียว
CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
การคูณด้วยสเกลของหน้าจอคุณจะได้ความละเอียดของพิกเซลจริง
ดีอ่านบนความแตกต่างระหว่างคะแนนและพิกเซลใน iOS สามารถอ่านได้ที่นี่
แก้ไข: (เวอร์ชันสำหรับ Swift)
let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)
คลาส UIScreen ช่วยให้คุณค้นหาความละเอียดของหน้าจอในจุดและพิกเซล
ความละเอียดหน้าจอวัดเป็นจุดหรือพิกเซล ไม่ควรสับสนกับขนาดหน้าจอ ขนาดหน้าจอที่เล็กลงอาจมีความละเอียดสูงขึ้น
'ขอบเขตความกว้าง' ของ UIScreen ส่งคืนขนาดสี่เหลี่ยมในจุด
'nativeBounds.width' ของ UIScreen ส่งคืนขนาดสี่เหลี่ยมเป็นพิกเซลค่านี้ตรวจพบเป็น PPI (จุดต่อนิ้ว) แสดงความคมชัดและความชัดเจนของภาพบนอุปกรณ์
คุณสามารถใช้ UIScreen class เพื่อตรวจหาค่าเหล่านี้ทั้งหมด
Swift3
// Normal Screen Bounds - Detect Screen size in Points.
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
print("\n width:\(width) \n height:\(height)")
// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.main.nativeBounds.width
let nHeight = UIScreen.main.nativeBounds.height
print("\n Native Width:\(nWidth) \n Native Height:\(nHeight)")
ปลอบใจ
width:736.0
height:414.0
Native Width:1080.0
Native Height:1920.0
สวิฟต์ 2.x
//Normal Bounds - Detect Screen size in Points.
let width = UIScreen.mainScreen.bounds.width
let height = UIScreen.mainScreen.bounds.height
// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.mainScreen.nativeBounds.width
let nHeight = UIScreen.mainScreen.nativeBounds.height
objectivec
// Normal Bounds - Detect Screen size in Points.
CGFloat *width = [UIScreen mainScreen].bounds.size.width;
CGFloat *height = [UIScreen mainScreen].bounds.size.height;
// Native Bounds - Detect Screen size in Pixels.
CGFloat *width = [UIScreen mainScreen].nativeBounds.size.width
CGFloat *height = [UIScreen mainScreen].nativeBounds.size.width
ใช้ใน App Delegate: ฉันใช้สตอรี่บอร์ด
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
//----------------HERE WE SETUP FOR IPHONE 4/4s/iPod----------------------
if(iOSDeviceScreenSize.height == 480){
UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
// Instantiate the initial view controller object from the storyboard
UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];
// Instantiate a UIWindow object and initialize it with the screen size of the iOS device
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Set the initial view controller to be the root view controller of the window object
self.window.rootViewController = initialViewController;
// Set the window object to be the key window and show it
[self.window makeKeyAndVisible];
iphone=@"4";
NSLog(@"iPhone 4: %f", iOSDeviceScreenSize.height);
}
//----------------HERE WE SETUP FOR IPHONE 5----------------------
if(iOSDeviceScreenSize.height == 568){
// Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];
// Instantiate the initial view controller object from the storyboard
UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];
// Instantiate a UIWindow object and initialize it with the screen size of the iOS device
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Set the initial view controller to be the root view controller of the window object
self.window.rootViewController = initialViewController;
// Set the window object to be the key window and show it
[self.window makeKeyAndVisible];
NSLog(@"iPhone 5: %f", iOSDeviceScreenSize.height);
iphone=@"5";
}
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// NSLog(@"wqweqe");
storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];
}
return YES;
}
สำหรับ iOS 8 เราสามารถใช้สิ่งนี้[UIScreen mainScreen].nativeBounds
ได้ดังนี้:
- (NSInteger)resolutionX
{
return CGRectGetWidth([UIScreen mainScreen].nativeBounds);
}
- (NSInteger)resolutionY
{
return CGRectGetHeight([UIScreen mainScreen].nativeBounds);
}
ดูการอ้างอิงหน้าจอ UIS: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html
if([[UIScreen mainScreen] respondsToSelector:NSSelectorFromString(@"scale")])
{
if ([[UIScreen mainScreen] scale] < 1.1)
NSLog(@"Standard Resolution Device");
if ([[UIScreen mainScreen] scale] > 1.9)
NSLog(@"High Resolution Device");
}
NSLog(@"%f",[[UIScreen mainScreen] scale]);
ใช้รหัสนี้เพื่อช่วยในการรับความละเอียดหน้าจอของอุปกรณ์ทุกประเภท
[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width