xCode #if #define iphone 模型
xCode #if #define iphone model
在我使用的 xcode 项目中(在 .m 文件中)
#define embedRectIphone CGRectMake(0, 0, 320, 180)
这在早期版本中很好。
但是现在应该不一样了,因为 iPhone 有很多尺寸,所以我需要类似
的东西
.h 文件看起来像:
#import <UIKit/UIKit.h>
@interface WebcamsDetailViewController : GAITrackedViewController <VideoPlayerDelegate> {
VideoPlayerKit *videoPlayer;
NSMutableArray *viewControllers;
CGRect embedViewRect;
}
@end
然后,我这样调用我的元素(嵌入式自定义视频播放器)(在 .m 文件中)
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
}
return self;
}
它似乎在模拟器上不起作用。
那可能吗?我在这里错了吗?
关于如何解决这个问题还有其他想法吗?
经过下面的一些帮助,.m 文件看起来像:
#import "WebcamsDetailViewController.h"
#import "AppDelegate.h"
#import "Webcam.h"
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)
#define embedRectIpad CGRectMake(0, 0, 768, 400)
@interface WebcamsDetailViewController ()
@end
@implementation WebcamsDetailViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
}
return self;
}
...
@end
希望得到答案,
最好的祝福,
大卫
不要依赖这些 "TARGET_DEVICE_IPHONE_6" 宏。像这样尝试。
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
然后
#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)
这是完全错误的。这样做,使用#define,你会要么得到一个在iPhone 4上工作的应用程序,或一个应用程序适用于 iPhone 5, 或 适用于 iPhone 6 等。您不会获得适用于所有应用程序的应用程序。包括苹果明年发布的iPhone7+c。
像您一样使用硬编码矩形真是太可怕了。你真的应该仔细阅读 NSLayoutConstraint 之类的东西,以获得适用于任何地方的东西。看看 Interface Builder 为您提供了什么。只需构建您选择 "New Project" 时获得的示例程序之一;它们会自动处理多个不同尺寸的设备,您也可以。
在我使用的 xcode 项目中(在 .m 文件中)
#define embedRectIphone CGRectMake(0, 0, 320, 180)
这在早期版本中很好。
但是现在应该不一样了,因为 iPhone 有很多尺寸,所以我需要类似
的东西.h 文件看起来像:
#import <UIKit/UIKit.h>
@interface WebcamsDetailViewController : GAITrackedViewController <VideoPlayerDelegate> {
VideoPlayerKit *videoPlayer;
NSMutableArray *viewControllers;
CGRect embedViewRect;
}
@end
然后,我这样调用我的元素(嵌入式自定义视频播放器)(在 .m 文件中)
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
}
return self;
}
它似乎在模拟器上不起作用。 那可能吗?我在这里错了吗? 关于如何解决这个问题还有其他想法吗?
经过下面的一些帮助,.m 文件看起来像:
#import "WebcamsDetailViewController.h"
#import "AppDelegate.h"
#import "Webcam.h"
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)
#define embedRectIpad CGRectMake(0, 0, 768, 400)
@interface WebcamsDetailViewController ()
@end
@implementation WebcamsDetailViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
}
return self;
}
...
@end
希望得到答案, 最好的祝福, 大卫
不要依赖这些 "TARGET_DEVICE_IPHONE_6" 宏。像这样尝试。
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
然后
#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)
这是完全错误的。这样做,使用#define,你会要么得到一个在iPhone 4上工作的应用程序,或一个应用程序适用于 iPhone 5, 或 适用于 iPhone 6 等。您不会获得适用于所有应用程序的应用程序。包括苹果明年发布的iPhone7+c。
像您一样使用硬编码矩形真是太可怕了。你真的应该仔细阅读 NSLayoutConstraint 之类的东西,以获得适用于任何地方的东西。看看 Interface Builder 为您提供了什么。只需构建您选择 "New Project" 时获得的示例程序之一;它们会自动处理多个不同尺寸的设备,您也可以。