是否有可能创建仅半部分兼容iphone的应用程序,其他部分是通用的?

时间:2013-05-27 14:21:33

标签: iphone ios ipad

我正在开发一个应用程序,在其中作为客户端要求,很少有视图仅兼容iPhone 4设备,而其他视图与iPhone 4,5 / iPad兼容。那么在单一构建中是否可能?

我知道这是不可能的,但我想要你的建议。 如果您有任何与此相关的链接,请与我分享。

2 个答案:

答案 0 :(得分:7)

是的,可以为iPhone 3.5",iPhone 4"提供不同的视图。和iPad。此外,您可以在每个不同的设备中实现不同的功能。但是,iOS User Interface Guidelines建议您在不同设备上提供相同的功能。

  

保留应用的主要功能,无论其运行的设备如何。即使一个版本可能提供比另一个版本更深入或交互式的任务呈现,但重要的是避免让用户感觉他们在两个完全不同的应用程序之间进行选择。

实际上,您可以使用此宏以编程方式编写分支以(以编程方式)构建视图:

#define isIpad() \
([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] && \
[[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad)

#define isWidescreen ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 )<DBL_EPSILON )
#define isIphone ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )
#define isIpod   ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )
#define isIphone5 ( isIphone && isWidescreen )

此外,您可以使用bifurcation和UIViewController消息- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil为每个不同的设备创建不同的xib文件,以加载正确的文件。

最后,您可以在xib文件名中使用修饰符来加载iphone和ipad之间的不同资源。例如:您的iPad UI具有FirstViewController.xib;如果设备是iPhone(而不是FirstViewController.xib),你可以创建一个将由iOS自动加载的FirstViewController~iphone.xib。您可以查看this答案,了解有关此主题的更多信息。

修改

如果你已经&#34; iPhone只有xib文件&#34;并且您想在iPad上运行这些文件,您应该考虑复制每个文件,并将副本转换为iPad目标,如thisthis解答所述。然后,您可以重命名以&#34; ~ipad.xib&#34;结尾的副本,这应该可以解决您的问题,但是,这些视图需要进行布局修订。

答案 1 :(得分:1)

只需通过代码来决定。如果一个视图可用于iPhone,请调用它,如果不是只是让它。区分iPhone和iPad只需使用

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        // iPad
    else if([[UIScreen mainScreen] bounds].size.height == 568)
    {
        // iPhone retina 4 (iPhone 5)
    }else
        // Older iPhones