iOS 6 앱 - iPhone 5 화면 크기에 대처하는 방법
아이폰5의 화면크기를 어떻게 하면 좋을지 궁금해서요.
GCRect Make는 높이가 더 높기 때문에 레티나를 받았을 때처럼 좌표를 사용하는 것(및 레티나/비레티나 문제가 있는 픽셀을 2배만 사용하는 것)이 버전 간에 심리스하게 동작하지 않습니다.
그리고 아이패드처럼 스토리보드를 두 개 디자인해야 하나요?
저는 개인적으로 애플이 여러분이 무언가를 그릴 때마다 화면 크기를 확인할 것을 요구하지 않을 것이라고 생각합니다.아이패드에 그런 일이 있나요?
모든 앱은 오늘 프레젠테이션에서 설명한 바와 같이 세로 방향으로 늘어선 화면에서 계속 작동합니다.그것들은 우편함에 보관되거나 기본적으로 추가 88점은 단순히 검은색일 것입니다.
iOS 6+만 지원할 계획이라면 자동 레이아웃을 사용하는 것이 좋습니다.고정된 레이아웃 처리를 모두 제거하고 대신 구속조건을 사용하여 레이아웃을 수행합니다.어떤 것도 하드코드 되지 않을 것이고, 당신의 삶은 훨씬 더 단순해질 것이다.
그러나 오래된 iOS를 지원해야 하는 경우에는 애플리케이션에 따라 다릅니다.표준 네비게이션 바 및/또는 탭 바를 사용하는 대부분의 애플리케이션은 단순히 중간에 있는 콘텐츠를 확장하여 추가 포인트를 모두 사용할 수 있습니다.중앙 컨텐츠의 자동 크기 조정 마스크를 양방향으로 확장하도록 설정합니다.
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
테이블 뷰에서는 즉시 사용할 수 있지만, 앱이 콘텐츠를 표시하기 위해 픽셀 단위 레이아웃을 사용했다면 다양한 높이를 수용할 수 있도록 콘텐츠를 다시 이미지화하는 것이 가장 좋습니다.
이것이 가능하지 않은 경우, 남은 유일한 옵션은 두 개의 UI(iPhone 5, iPhone 5 이전)를 갖는 것입니다.
이 경우 추가 포인트/픽셀이 검은색으로 표시되는 기본 레터박스 모델을 선택할 수 있습니다.
편집
iPhone 5에서 앱을 작동시키려면 런처 이미지의 레티나 버전을 추가해야 합니다.을 붙여야 .Default-568h@2x.png
.- -) 망막의 질입니다.기서))))))):::::::)
Xcode 내에서 이 이미지를 선택할 수도 있습니다.타겟으로 이동하여 Summary 섹션에서 Launch Images를 찾습니다.이미지의 사이즈는 640 x 1136 픽셀이어야 합니다.도움이 된다면, 여기 그것을 찾을 수 있는 스크린샷이 있습니다.
640 x 1136 픽셀의 PNG 이미지를 추가해야 합니다.Default-568h@2x.png
를 프로젝트의 디폴트 스플래시 이미지로 하면 추가 공간이 사용됩니다(심플한 테이블 기반 어플리케이션에 대한 노력 없이 게임은 더 많은 노력이 필요합니다).
모든 화면 해상도를 처리하기 위해 작은 UIDevice 카테고리를 만들었습니다.여기서 입수할 수 있습니다만, 코드는 다음과 같습니다.
파일 UIDevice + 해결.h:
enum {
UIDeviceResolution_Unknown = 0,
UIDeviceResolution_iPhoneStandard = 1, // iPhone 1,3,3GS Standard Display (320x480px)
UIDeviceResolution_iPhoneRetina4 = 2, // iPhone 4,4S Retina Display 3.5" (640x960px)
UIDeviceResolution_iPhoneRetina5 = 3, // iPhone 5 Retina Display 4" (640x1136px)
UIDeviceResolution_iPadStandard = 4, // iPad 1,2,mini Standard Display (1024x768px)
UIDeviceResolution_iPadRetina = 5 // iPad 3 Retina Display (2048x1536px)
}; typedef NSUInteger UIDeviceResolution;
@interface UIDevice (Resolutions)
- (UIDeviceResolution)resolution;
NSString *NSStringFromResolution(UIDeviceResolution resolution);
@end
UIDevice+Resolutions.m 파일:
#import "UIDevice+Resolutions.h"
@implementation UIDevice (Resolutions)
- (UIDeviceResolution)resolution
{
UIDeviceResolution resolution = UIDeviceResolution_Unknown;
UIScreen *mainScreen = [UIScreen mainScreen];
CGFloat scale = ([mainScreen respondsToSelector:@selector(scale)] ? mainScreen.scale : 1.0f);
CGFloat pixelHeight = (CGRectGetHeight(mainScreen.bounds) * scale);
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
if (scale == 2.0f) {
if (pixelHeight == 960.0f)
resolution = UIDeviceResolution_iPhoneRetina4;
else if (pixelHeight == 1136.0f)
resolution = UIDeviceResolution_iPhoneRetina5;
} else if (scale == 1.0f && pixelHeight == 480.0f)
resolution = UIDeviceResolution_iPhoneStandard;
} else {
if (scale == 2.0f && pixelHeight == 2048.0f) {
resolution = UIDeviceResolution_iPadRetina;
} else if (scale == 1.0f && pixelHeight == 1024.0f) {
resolution = UIDeviceResolution_iPadStandard;
}
}
return resolution;
}
@end
이 코드를 사용하는 방법은 다음과 같습니다.
1) 상기 UIDevice+Resolutions.h 및 UIDevice+Resolutions.m 파일을 프로젝트에 추가합니다.
2) #import "UIDevice+Resolutions" 행을 추가합니다.h"를 ViewController.m으로 전송합니다.
3) 이 코드를 추가하여 취급하고 있는 디바이스의 버전을 확인합니다.
int valueDevice = [[UIDevice currentDevice] resolution];
NSLog(@"valueDevice: %d ...", valueDevice);
if (valueDevice == 0)
{
//unknow device - you got me!
}
else if (valueDevice == 1)
{
//standard iphone 3GS and lower
}
else if (valueDevice == 2)
{
//iphone 4 & 4S
}
else if (valueDevice == 3)
{
//iphone 5
}
else if (valueDevice == 4)
{
//ipad 2
}
else if (valueDevice == 5)
{
//ipad 3 - retina display
}
방금 iOS 6.0 버전의 앱 중 하나를 업데이트하여 스토어에 보냈습니다. 5에 iOS 5.0을 하고 .shouldAutorotateToInterfaceOrientation:
방법
다음 작업을 수행해야 했습니다.
6에서는 자동 6에서는 iOS 6에서는 6의 자동 회전이 변화하고 있습니다.OS 6 서 os os 、shouldAutorotateToInterfaceOrientation:
UIView Controller u u u 。ㅇㅇㅇㅇ를 .supportedInterfaceOrientationsForWindow:
★★★★★★★★★★★★★★★★★」shouldAutorotate
따라서 다음과 같은 새로운 방법을 추가했습니다(iOS 5와의 호환성을 위해 이전 방식을 그대로 사용).
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- 「」를 사용.
viewWillLayoutSubviews
뷰의 경계 직사각형을 사용하여 레이아웃을 조정합니다. - 모달 뷰 컨트롤러:그
willRotateToInterfaceOrientation:duration:
,
willAnimateRotationToInterfaceOrientation:duration:
, 그리고.
didRotateFromInterfaceOrientation:
예를 들어 다음과 같은 경우 메서드는 자체에서 전체 화면
프레젠테이션을 수행하는 뷰 컨트롤러에서 호출되지 않습니다.presentViewController:animated:completion:
. - 그런 다음 필요한 뷰의 자동 레이아웃을 수정했습니다.
- 스타트업 뷰용 시뮬레이터 이미지 및 iTunes 스토어 뷰를 PhotoShop에 복사하여 png 파일로 내보냈습니다.
- 은 다음과 같습니다.
Default-568h@2x.png
640×1136이다.또한 동일한 세로 모드에 대해 640×1096을 제공할 수 있습니다(상태 표시줄 제거).iPhone에서 가로 방향만 사용할 수 있는 앱이라면 가로 방향 모드에서도 비슷한 크기가 제공될 수 있습니다. - iOS 4의 이전 버전과의 호환성이 떨어졌습니다.그 주된 이유는 에 대한 지원이 되기 때문입니다.
armv6
코드가 삭제되었습니다.따라서 현재 지원할 수 있는 모든 디바이스(실행 중)armv7
)를 iOS 5로 업그레이드할 수 있습니다. - 또한 iPhone 5를 지원하는 Armv7s 세대 코드이므로 업데이트할 때까지 서드파티 프레임워크(Admob 등)를 사용할 수 없습니다.
회전의 변화가 있기 때문에 iOS 5와 iOS 6에서 자동 회전을 테스트하는 것만으로 충분했습니다.
아니요.
if ([[UIScreen mainScreen] bounds].size.height > 960)
iPhone 5는 잘못되어 있습니다.
if ([[UIScreen mainScreen] bounds].size.height == 568)
@interface UIDevice (Screen)
typedef enum
{
iPhone = 1 << 1,
iPhoneRetina = 1 << 2,
iPhone5 = 1 << 3,
iPad = 1 << 4,
iPadRetina = 1 << 5
} DeviceType;
+ (DeviceType)deviceType;
@end
.m
#import "UIDevice+Screen.h"
@implementation UIDevice (Screen)
+ (DeviceType)deviceType
{
DeviceType thisDevice = 0;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
thisDevice |= iPhone;
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
{
thisDevice |= iPhoneRetina;
if ([[UIScreen mainScreen] bounds].size.height == 568)
thisDevice |= iPhone5;
}
}
else
{
thisDevice |= iPad;
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
thisDevice |= iPadRetina;
}
return thisDevice;
}
@end
이렇게 하면 (화면 크기에 관계없이) iPhone 또는 iPad 중 어느 쪽인지 탐지할 수 있습니다.
if ([UIDevice deviceType] & iPhone)
또는
if ([UIDevice deviceType] & iPad)
iPhone 5 만을 검출하고 싶은 경우는,
if ([UIDevice deviceType] & iPhone5)
Malcoms의 답변과는 달리 아이폰인지 확인하기 위해서만 확인이 필요하다는 답변과는 달리,
if ([UIDevice currentResolution] == UIDevice_iPhoneHiRes ||
[UIDevice currentResolution] == UIDevice_iPhoneStandardRes ||
[UIDevice currentResolution] == UIDevice_iPhoneTallerHiRes)`
어느 쪽이든 서로에게 큰 이점이 없다. 그것은 단지 개인적인 선호일 뿐이다.
@Pascal의 OP 질문에 대한 코멘트는 옳다.이미지를 추가하는 것만으로 검은 테두리를 제거하고 풀 하이트를 사용할 수 있습니다.
디바이스가 더 큰 디스플레이를 사용하고 있다고 판단하여 CGRect를 조정해야 합니다.예를 들어, 화면 하단에 정렬된 것이 필요한 경우.
내장된 방법은 있을 거라고 생각합니다만, 아직 아무것도 본 적이 없고, 아직 NDA가 많이 있기 때문에 앱에서 사용하는 방법은 글로벌한 기능이라고 할 수 있습니다.다음 항목을 .pch 파일에 추가하면 간단합니다.if( is4InchRetina() ) { ... }
CGRects 등을 조정하기 위한 전화
static BOOL is4InchRetina()
{
if (![UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 548 || [UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 568)
return YES;
return NO;
}
쓸 수 있을 것 같아요.[UIScreen mainScreen].bounds.size.height
오브젝트의 스텝을 계산합니다.스텝을 계산할 때 두 분해능에 대한 좌표를 설정할 수 있습니다.
아니면 위와 같은 높이로 해서if(iphone5) then... else if(iphone4) then... else if(ipad)
이런 거.
스토리보드를 이용한다면 새로운 아이폰을 위해 새로 만들어야 할 것 같습니다.
GCRect Make는 높이가 더 높기 때문에 Retina를 받았을 때처럼 좌표를 사용하는 것이 버전 간에 심리스하게 동작하지 않습니다.
Retina 디스플레이에서도 동일하게 동작합니다.CoreGraphics 좌표계의 1유닛은 2개의 물리 픽셀에 대응하지만, 아무것도 할 필요가 없고, 아무것도 할 필요가 없어, 논리는 그대로입니다.(레티나 이외의 앱을 실제로 레티나 아이폰에서 실행해 본 적이 있습니까?)
'CGRectMakes' co...를 사용하면 안 됩니다. 걸 있는 거예요.[[UIScreen mainScreen] applicationFrame]
.
언급URL : https://stackoverflow.com/questions/12396545/ios-6-apps-how-to-deal-with-iphone-5-screen-size
'programing' 카테고리의 다른 글
Swift에서 개체가 지정된 유형인지 확인하는 중 (0) | 2023.04.12 |
---|---|
Python: 인덱스 세트에 따라 목록에서 하위 집합 선택 (0) | 2023.04.12 |
유닛 테스트에서의 WPF 디스패처 사용 (0) | 2023.04.12 |
파일이 Excel로 열려 있는 경우 pd.read_excel이 PermissionError를 발생시킵니다. (0) | 2023.04.12 |
.svn 디렉토리를 무시하려면 어떻게 해야 하나요? (0) | 2023.04.12 |