[UIScreen mainScreen] .bounds.size ขึ้นอยู่กับการวางแนวใน iOS8 หรือไม่?


184

ฉันรันรหัสต่อไปนี้ทั้งใน iOS 7 และ iOS 8:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f", 
      (landscape ? @"Yes" : @"No"), 
      [[UIScreen mainScreen] bounds].size.width, 
      [[UIScreen mainScreen] bounds].size.height);

ต่อไปนี้เป็นผลลัพธ์จาก iOS 8:

Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00

เปรียบเทียบกับผลลัพธ์ใน iOS 7:

Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00

มีเอกสารใดที่ระบุการเปลี่ยนแปลงนี้หรือไม่? หรือเป็นข้อบกพร่องชั่วคราวใน iOS 8 APIs


13
เอาท์พุท iOS8 ดูเหมือนจะมีเหตุผลมากขึ้น
เลวี

คำตอบ:


173

ใช่มันขึ้นอยู่กับการวางแนวใน iOS8 ไม่ใช่ข้อบกพร่อง คุณสามารถตรวจสอบเซสชัน 214 จาก WWDC 2014 สำหรับข้อมูลเพิ่มเติม: "ดูคอนโทรลเลอร์ระดับสูงใน iOS 8"

อ้างจากการนำเสนอ:

UIScreen คือส่วนต่อประสานที่มุ่งเน้น:

  • [ขอบเขตของ UIScreen] ตอนนี้ใช้อินเตอร์เฟสได้
  • [UIScreen applicationFrame] ตอนนี้เป็นแบบอินเตอร์เฟส
  • การแจ้งเตือนเฟรมของแถบสถานะเป็นการใช้อินเตอร์เฟส
  • การแจ้งเตือนเฟรมของคีย์บอร์ดนั้นเป็นแบบอินเตอร์เฟส

7
ในการบรรยาย WWDC ที่กล่าวถึงข้างต้นส่วนที่มุ่งเน้นอินเตอร์เฟสเริ่มต้นที่ 51:50
cnotethegr8

2
ฉันใช้เวลาส่วนใหญ่ในวันนี้เพื่อพยายามหลีกเลี่ยงความก้าวหน้านี้ เห็นได้ชัดว่ามันไม่ได้เกิดขึ้นเสมอไปดังนั้นหากคุณเป็นผู้พัฒนา SDK ที่ต้องทำงานกับแอปพลิเคชันอื่นสิ่งนี้ก็ซับซ้อนยิ่งขึ้น
Glenn Maynard

1
@aroth คุณไม่สามารถคิดค้นได้โดยไม่ต้องเบรก habbits เก่าบางอย่าง
บอริสวาย.

23
@ Borisy - ฉันไม่เห็นด้วยอย่างเคารพ ในกรณีส่วนใหญ่เป็นไปได้คิดค้นในขณะที่รักษาความเข้ากันได้ย้อนหลัง การเปลี่ยนแปลงที่เกิดขึ้นในความขี้เกียจมากกว่าสิ่งอื่นใดในความคิดของฉัน พวกเขาต้องการให้คนอื่นทำงาน
aroth

1
คำตอบนี้จะเป็นประโยชน์มากยิ่งขึ้นหากมีการอธิบายว่าอินเทอร์เฟซที่มุ่งเน้นหมายถึงอะไร ฉันอาจจะผิด แต่ฉันคิดว่าการพึ่งพาการปฐมนิเทศเกี่ยวข้องกับการดูคอนโทรลเลอร์เท่านั้น หากคุณใช้คลาสอื่นและคำนวณขอบเขตพวกมันยังคงเป็นไปตามสไตล์เก่า
Maxi Mus

59

ใช่มันขึ้นอยู่กับการวางแนวใน iOS8

ฉันเขียนวิธีใช้เพื่อแก้ไขปัญหานี้สำหรับแอพที่ต้องการรองรับระบบปฏิบัติการรุ่นเก่ากว่า

+ (CGSize)screenSize {
    CGSize screenSize = [UIScreen mainScreen].bounds.size;
    if ((NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
        return CGSizeMake(screenSize.height, screenSize.width);
    }
    return screenSize;
}

1
ฉันแก้ไขรหัสโปรดตรวจสอบเงื่อนไขของคุณสำหรับการตรวจสอบเวอร์ชั่นของระบบปฏิบัติการผิด
Jageen

@ Jageen โปรดอธิบายการตรวจสอบเวอร์ชั่นใช้งานได้สำหรับฉัน อะไรคือปัญหา?
cbartel

สิ่งที่ฉันเข้าใจคือเราต้องเปลี่ยนความสูงและความกว้างหาก OS เป็น iOS8 และการวางแนวคือแนวนอนใช่ไหม?
Jageen

@Jageen Negative ใน iOS 8 วิธีนี้ขึ้นอยู่กับการวางแนว ตรรกะของคุณเปลี่ยนไป การแก้ไขของคุณถูกปฏิเสธอย่างถูกต้อง
cbartel

@cbartel มีวิธีจัดหมวดหมู่นี้ใน UIScreen เพื่อให้การเรียกเดิมของเราไปที่ [UIScreen mainScreen] .bounds.size จะทำงานได้ทั้ง iOS 7 และ iOS 8 หรือไม่
kevinl

34

ใช่ขนาดหน้าจอตอนนี้ขึ้นอยู่กับการวางแนวใน iOS 8 บางครั้ง แต่ก็ต้องการที่จะได้รับการกำหนดขนาดคงที่เพื่อวางแนวแนวตั้ง นี่คือวิธีที่ฉันทำ

+ (CGRect)screenBoundsFixedToPortraitOrientation {
    UIScreen *screen = [UIScreen mainScreen];

    if ([screen respondsToSelector:@selector(fixedCoordinateSpace)]) {
                    return [screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace];
    } 
    return screen.bounds;
}

2
ฉันพบว่านี่จะช่วยแก้ปัญหาของแอป iPhone ปกติ แต่ไม่ใช่กับแอพของ iPhone ที่ทำงานบน iPad
ThomasW

32

ใช่ตอนนี้มันขึ้นอยู่กับทิศทาง

ฉันชอบวิธีด้านล่างในการเพิ่มขนาดหน้าจอในลักษณะที่ไม่ขึ้นอยู่กับทิศทางของคำตอบข้างต้นทั้งคู่เพราะมันง่ายขึ้นและเพราะไม่ได้ขึ้นอยู่กับรหัสการวางแนวใด ๆ (สถานะที่ขึ้นอยู่กับ เวลาที่ถูกเรียก) หรือการตรวจสอบเวอร์ชั่น คุณอาจต้องการพฤติกรรมใหม่ของ iOS 8 แต่จะสามารถใช้งานได้หากคุณต้องการให้ iOS ทุกรุ่นมีเสถียรภาพ

+(CGSize)screenSizeOrientationIndependent {
     CGSize screenSize = [UIScreen mainScreen].bounds.size;
     return CGSizeMake(MIN(screenSize.width, screenSize.height), MAX(screenSize.width, screenSize.height));
}

อาจจะไม่ทำงานกับบางอย่างเช่น Apple TV ที่ซึ่งมัน (เกือบ) กว้างกว่ามันสูงเสมอ
cbh2000

11

ที่เกี่ยวข้องกับคำถามนี้ในขณะที่มันแก้ปัญหาของฉันที่นี่สองกำหนดฉันใช้สำหรับการคำนวณความกว้างหน้าจอและความสูง:

#define SCREEN_WIDTH (IOS_VERSION_LOWER_THAN_8 ? (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) : [[UIScreen mainScreen] bounds].size.width)

#define SCREEN_HEIGHT (IOS_VERSION_LOWER_THAN_8 ? (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width) : [[UIScreen mainScreen] bounds].size.height)

#define IOS_VERSION_LOWER_THAN_8 (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1)

หากคุณรองรับทั้ง iOS 7 และ iOS 8 นี่เป็นทางออกที่ดีที่สุดสำหรับปัญหานี้


@Namit Gupta การแก้ไขของคุณไม่ถูกต้อง หากรุ่น IOS เป็น 8 หรือสูงกว่าเราสามารถใช้ขนาด UIScreen ได้เนื่องจากสิ่งเหล่านี้ขึ้นอยู่กับการวางแนว ก่อน iOS 8 คุณต้องตรวจสอบการวางแนวแถบสถานะ ขณะนี้การแก้ไขของคุณกำลังบอกว่า iOS ทุกเวอร์ชันไม่ต่ำกว่า 8 ควรตรวจสอบสถานะความผิดปกติซึ่งผิด
แอนทอน

9

คุณสามารถใช้nativeBounds(วางแนวอิสระ)

nativeBounds

สี่เหลี่ยม bounding ของหน้าจอทางกายภาพวัดเป็นพิกเซล (อ่านเท่านั้น)

ประกาศ SWIFT

  var nativeBounds: CGRect { get }

สี่เหลี่ยมนี้จะขึ้นอยู่กับอุปกรณ์ในการวางแนวแนวตั้ง ค่านี้จะไม่เปลี่ยนแปลงเมื่ออุปกรณ์หมุน

การตรวจจับความสูงของอุปกรณ์:

if UIScreen.mainScreen().nativeBounds.height == 960.0 {

}

การตรวจสอบความกว้างของอุปกรณ์:

if UIScreen.mainScreen().nativeBounds.width == 640.0 {

}

3
โปรดทราบว่าวิธีนี้ให้ผลตอบแทนพิกเซลในขณะที่วิธีอื่นส่วนใหญ่จัดการกับคะแนน สิ่งที่แตกต่างกันมาก
jcsahnwaldt Reinstate Monica

1
ในกรณีของฉันสิ่งที่ฉันต้องการ :) (OpenGL หรือมุมมองอื่น ๆ ที่ไม่ได้ขึ้นอยู่กับ UIViews แต่ที่ฉันต้องรู้ขนาดของพิกเซลที่แน่นอน)
Bersaelor

3
คำเตือน: บน iphone 6+ สิ่งนี้จะคืนค่า 1080 x 1920 ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ
Chanon

8

ไม่ใช่ข้อผิดพลาดใน iOS 8 SDK พวกเขาทำให้การวางแนวอินเตอร์เฟซที่ขอบเขตขึ้นอยู่กับ ตามคำถามของคุณเกี่ยวกับการอ้างอิงหรือเอกสารบางอย่างเพื่อให้ความจริงที่ว่าผมขอจะแนะนำให้คุณดูView Controller Advancements in iOS 8มันเป็น 214 เซสชั่นจากงาน WWDC 2014 ส่วนที่น่าสนใจที่สุด (ตามข้อสงสัยของคุณ) คือScreen Coordinatesเริ่มต้นที่ 50:45


5

ใช่มันขึ้นอยู่กับการวางแนวใน iOS8

นี่คือวิธีที่คุณจะมีวิธีการอ่านขอบเขตที่สอดคล้องกันในรูปแบบ iOS 8 ในรุ่น SDK และ OS

#ifndef NSFoundationVersionNumber_iOS_7_1
# define NSFoundationVersionNumber_iOS_7_1 1047.25
#endif

@implementation UIScreen (Legacy)

// iOS 8 way of returning bounds for all SDK's and OS-versions
- (CGRect)boundsRotatedWithStatusBar
{
    static BOOL isNotRotatedBySystem;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        BOOL OSIsBelowIOS8 = [[[UIDevice currentDevice] systemVersion] floatValue] < 8.0;
        BOOL SDKIsBelowIOS8 = floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1;
        isNotRotatedBySystem = OSIsBelowIOS8 || SDKIsBelowIOS8;
    });

    BOOL needsToRotate = isNotRotatedBySystem && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
    if(needsToRotate)
    {
        CGRect screenBounds = [self bounds];
        CGRect bounds = screenBounds;
        bounds.size.width = screenBounds.size.height;
        bounds.size.height = screenBounds.size.width;
        return bounds;
    }
    else
    {
        return [self bounds];
    }
}

@end

1
การตรวจสอบเวอร์ชั่น SDK และเป็นเคล็ดลับที่ดีในกรณีที่เพื่อนร่วมงานกำลังสร้างแอปของคุณด้วย SDK รุ่นที่แตกต่างกัน (แม้ว่ามันจะไม่เกิดขึ้น!)
Craig McMahon

4

โซลูชันของฉันคือการรวมกันของ MaxK และ hfossli ฉันทำวิธีนี้ในหมวดหมู่ของ UIScreen และไม่มีการตรวจสอบรุ่น (ซึ่งเป็นการปฏิบัติที่ไม่ดี):

//Always return the iOS8 way - i.e. height is the real orientation dependent height
+ (CGRect)screenBoundsOrientationDependent {
    UIScreen *screen = [UIScreen mainScreen];
    CGRect screenRect;
    if (![screen respondsToSelector:@selector(fixedCoordinateSpace)] && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
        screenRect = CGRectMake(screen.bounds.origin.x, screen.bounds.origin.y, screen.bounds.size.height, screen.bounds.size.width);
    } else {
        screenRect = screen.bounds;
    }

    return screenRect;
}

3

ฉันต้องการฟังก์ชั่นตัวช่วยด่วนที่ยังคงทำงานเหมือน iOS7 ใน iOS8 - อนุญาตให้ฉันสลับการ[[UIScreen mainScreen] bounds]โทรของฉันและไม่ต้องแตะรหัสอื่น ...

+ (CGRect)iOS7StyleScreenBounds {
    CGRect bounds = [UIScreen mainScreen].bounds;
    if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
        bounds.size = CGSizeMake(bounds.size.height, bounds.size.width);
    }
        return bounds;
}

น่ารังเกียจ แต่ทำงานให้เสร็จจนกว่าจะถึงเวลาสามารถแก้ไขสิ่งต่าง ๆ ได้อย่างถูกต้อง :-)
DuneCat

3

วิธีการด้านล่างนี้สามารถใช้เพื่อค้นหาขอบเขตหน้าจอสำหรับทิศทางที่กำหนดโดยไม่ขึ้นกับเวอร์ชัน iOS วิธีนี้จะคืนค่าขอบเขตตามขนาดหน้าจอของอุปกรณ์และจะให้ค่า CGRect เดียวกันโดยไม่ขึ้นกับเวอร์ชัน iOS

- (CGRect)boundsForOrientation:(UIInterfaceOrientation)orientation {

    CGFloat width   = [[UIScreen mainScreen] bounds].size.width;
    CGFloat height  = [[UIScreen mainScreen] bounds].size.height;

    CGRect bounds = CGRectZero;

    if (UIInterfaceOrientationIsLandscape(orientation)) {
        bounds.size = CGSizeMake(MAX(width, height), MIN(width, height));
    } else {
        bounds.size = CGSizeMake(MIN(width, height), MAX(width, height));
    }

    return bounds;
}

// For the below example, bounds will have the same value if you run the code on iOS 8.x or below versions.
CGRect bounds = [self boundsForOrientation:UIInterfaceOrientationPortrait]; 

1

นั่นคือสิ่งที่ฉันใช้ในการคำนวณ rect ที่ถูกต้อง:

UIScreen* const mainScreen = [UIScreen mainScreen];
CGRect rect = [mainScreen bounds];
#ifdef __IPHONE_8_0
if ([mainScreen respondsToSelector:@selector(coordinateSpace)])
{
    if ([mainScreen respondsToSelector:@selector(fixedCoordinateSpace)])
    {
        id tmpCoordSpace = [mainScreen coordinateSpace];
        id tmpFixedCoordSpace = [mainScreen fixedCoordinateSpace];

        if ([tmpCoordSpace respondsToSelector:@selector(convertRect:toCoordinateSpace:)])
        {
            rect = [tmpCoordSpace convertRect:rect toCoordinateSpace: tmpFixedCoordSpace];
        }
    }
}
#endif

1

เพียงแค่เพิ่มฟังก์ชั่น cbartel ที่ยอดเยี่ยมในเวอร์ชั่นที่รวดเร็ว

func screenSize() -> CGSize {
    let screenSize = UIScreen.mainScreen().bounds.size
    if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) && UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) {
        return CGSizeMake(screenSize.height, screenSize.width)
    }
    return screenSize
}

1

ปัญหาของฉันเกี่ยวข้องกับกรอบ UIWindows ซึ่งกำลังเป็นลบ ดังนั้นทำรหัสดังต่อไปนี้ใน MyViewController - (NSUInteger) ได้รับการสนับสนุนวิธีการอินเตอร์เฟซใบหน้า

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[self.view setFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];

[appDel.window setFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];

และมันใช้งานได้สำหรับฉันลองดู


1

iOS 8 ขึ้นไป

วิธีแก้ปัญหาสำหรับผู้ที่ต้องการหาขนาดหน้าจอเป็นคะแนน (หน้าจอ 3.5 นิ้วมี 320 × 480 คะแนน, หน้าจอ 4.0 นิ้วมี 320 × 568 คะแนนเป็นต้น)

- (CGSize)screenSizeInPoints
{
    CGFloat width = [[UIScreen mainScreen] bounds].size.width;
    CGFloat height = [[UIScreen mainScreen] bounds].size.height;

    if (width > height) {
        return CGSizeMake(height, width);
    }
    else {
        return [[UIScreen mainScreen] bounds].size;
    }
}

0

สิ่งหนึ่งที่ฉันสังเกตคือลำดับของทิศทางการอินเทอร์เฟซที่สนับสนุนใน Info.plist นั้นสำคัญ ฉันพบปัญหาของคำถามนี้กับแอพของฉัน (ที่วางในโค้ด) แต่ฉันไม่ได้ระบุตำแหน่งที่การวางแนวเริ่มต้นคือแนวตั้ง

ฉันคิดว่าการวางแนวเริ่มต้นคือแนวตั้งในทุกกรณี

การจัดเรียง itens ใหม่ใน Info.plist ให้วาง Portrait ก่อนและเรียกคืนพฤติกรรมที่คาดไว้


0

นี่จะให้อุปกรณ์ที่ถูกต้องในiOS7และiOS8ทั้งคู่

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define IS_PORTRAIT         UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)

+ (BOOL)isIPHONE4{

// < iOS 8.0
if(SYSTEM_VERSION_LESS_THAN(@"8.0")){

        if ([self getDeviceWidth] == 320.0 && [self getDeviceHeight] == 480.0) {
            return YES;
        } else {
            return NO;
        }

// >= iOS 8.0
}else{

    if(IS_PORTRAIT){

        if ([self getDeviceWidth] == 320.0 && [self getDeviceHeight] == 480.0) {
            return YES;
        } else {
            return NO;
        }

    }else{

        if ([self getDeviceWidth] == 480.0 && [self getDeviceHeight] == 320.0) {
            return YES;
        } else {
            return NO;
        }

    }

}


}

+ (BOOL)isIPHONE5{


// < iOS 8.0
if(SYSTEM_VERSION_LESS_THAN(@"8.0")){

    if ([self getDeviceWidth] == 320.0 && [self getDeviceHeight] == 568.0) {
        return YES;
    } else {
        return NO;
    }

    // >= iOS 8.0
}else{

    if(IS_PORTRAIT){

        if ([self getDeviceWidth] == 320.0 && [self getDeviceHeight] == 568.0) {
            return YES;
        } else {
            return NO;
        }

    }else{

        if ([self getDeviceWidth] == 568.0 && [self getDeviceHeight] == 320.0) {
            return YES;
        } else {
            return NO;
        }

    }

}

}

+ (BOOL)isIPHONE6{

// < iOS 8.0
if(SYSTEM_VERSION_LESS_THAN(@"8.0")){

    if ([self getDeviceWidth] == 375.0 && [self getDeviceHeight] == 667.0) {
        return YES;
    } else {
        return NO;
    }

    // >= iOS 8.0
}else{

    if(IS_PORTRAIT){

        if ([self getDeviceWidth] == 375.0 && [self getDeviceHeight] == 667.0) {
            return YES;
        } else {
            return NO;
        }

    }else{

        if ([self getDeviceWidth] == 667.0 && [self getDeviceHeight] == 375.0) {
            return YES;
        } else {
            return NO;
        }

    }

}


}
+ (BOOL)isIPHONE6Plus{


// < iOS 8.0
if(SYSTEM_VERSION_LESS_THAN(@"8.0")){

    if ([self getDeviceWidth] == 414.0 && [self getDeviceHeight] == 736.0) {
        return YES;
    } else {
        return NO;
    }

    // >= iOS 8.0
}else{

    if(IS_PORTRAIT){

        if ([self getDeviceWidth] == 414.0 && [self getDeviceHeight] == 736.0) {
            return YES;
        } else {
            return NO;
        }

    }else{

        if ([self getDeviceWidth] == 736.0 && [self getDeviceHeight] == 414.0) {
            return YES;
        } else {
            return NO;
        }

    }

}


}

+ (CGFloat)getDeviceHeight{

//NSLog(@"Device width: %f",[UIScreen mainScreen].bounds.size.height);
return [UIScreen mainScreen].bounds.size.height;
}
+ (CGFloat)getDeviceWidth{

//NSLog(@"Device width: %f",[UIScreen mainScreen].bounds.size.height);
return [UIScreen mainScreen].bounds.size.width;
}

// คุณสามารถเพิ่มอุปกรณ์ได้เช่นกัน (ieiPad)


คำถามไม่เกี่ยวกับการจดจำอุปกรณ์ตามความละเอียดหน้าจอ นอกจากนี้ Apple แนะนำให้สร้าง UI แบบปรับตัวซึ่งจะขึ้นอยู่กับคลาสขนาดที่ไม่ได้อยู่ในการตรวจจับอุปกรณ์ / หน้าจอ
Julian Król

0

ใช้วิธีการแก้ปัญหาของ mnemia เล็กน้อยซึ่งไม่มีการตรวจสอบเวอร์ชั่น iOS โดยใช้ min / max บนขอบเขตของหน้าจอหลัก
ฉันต้องการสิ่งที่CGRectได้CGRectจากขอบเขตหน้าจอหลักและเปลี่ยนไปsize.width=min(w,h), size.height=max(w,h). จากนั้นฉันเรียกว่าระบบปฏิบัติการที่เป็นอิสระได้รับCGRectการทำงานในสถานที่สองในรหัสของฉันที่ฉันได้รับขนาดหน้าจอสำหรับการOpenGLสัมผัส ฯลฯ ก่อนที่จะแก้ไขผมมี 2 ปัญหา - บน iOS 8.x ในแนวนอนตำแหน่งการแสดงผลแบบของOpenGLมุมมองที่ไม่ถูกต้อง: 1 / 4 เต็มหน้าจอในส่วนด้านล่างซ้าย และสัมผัสที่สองส่งคืนค่าที่ไม่ถูกต้อง ปัญหาทั้งสองได้รับการแก้ไขตามที่อธิบายไว้ ขอบคุณ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.