首页 >iOS开发

iPad/iPhone及Universal程序开发心得总结

2010-08-03 15:59 编辑: mac52ipod 分类:iOS开发 来源:CocoaChina

本文转自 CocoaChina 会员“花太香齐”的博客,原文地址 http://www.ieliwb.com/ipad-iphone-universal-dev/

1 因为iPad的universal只有一个binary,所以没有的函数和类要weak link,而且不能用条件编译(因为只能编译成3.2)。
判断是iPad还是iPhone:


if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
       NSLog(@"iPad");
}
else
{
      NSLog(@"iPhone");
}

2 调试的时候,iPad模拟器只能认为是iPad,这时候,用3.2编译,然后选到3.0模拟器环境,别点build,直接点run。

3 popover创建的时候一定要这么写(即使放在if条件里)这个十分重要!否则iPhone调试会出错
SettingController *settingController = [[SettingController alloc] initWithNibName:nil bundle:nil];
   
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {      
        UINavigationController *setting_navigationController = [[UINavigationController alloc] initWithRootViewController:settingController];
       
        Class popoverClass = NSClassFromString(@"UIPopoverController");
        if (popoverClass) {
            UIPopoverController *popover = [[popoverClass alloc] initWithContentViewController:setting_navigationController];
            popover.delegate = self;
            [popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        }
        [setting_navigationController release];
    }
    else
    {
        [self.navigationController pushViewController:settingController animated:YES];
    }
   
    [settingController release];

4 相关设置:
Base SDK = iphone device 3.2

Target Devise Family = iPhone/iPad
iPhone OS Deployment Target = iphone device 3.1.3

 程序Target的iPhone OS Deployment Target的build setting必须设置为3.13或者更早(这样会带来程序的兼容性问题,比如不能用3.2SDK里面的API,也不能使用在3.2SDK里面被Deprecated的API)

5 3.2的时候可以接iPhone真机以Universal的形式调试。

6 将一个现有的iPhone程序升级到支持iPad的方法:

 1)选择Prject–The Upgrade Current Target for iPad

 2)这里会有两个选项,升级为Universal或者创建一个单独的iPad target

7 iPad 至少支持一个方向的180度旋转。推荐支持4个方向。并提供横向与纵向的启动画面。
1)default图片根据ipad的方向来变换方向设置:
Filename Dimensions
Default-Portrait.png * 768w x 1004h
Default-PortraitUpsideDown.png 768w x 1004h
Default-Landscape.png ** 1024w x 748h
Default-LandscapeLeft.png 1024w x 748h
Default-LandscapeRight.png 1024w x 748h
Default.png Not recommended


2)旋转方向时reload view,重置控件大小:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{  
    UIImageView *logoView = (UIImageView *)[self.view viewWithTag:LOGO_VIEW_TAG];
    logoView.frame = CGRectMake((self.view.frame.size.width-320)/2, 50, 320, 120);
   
    UITextView *textView = (UITextView *)[self.view viewWithTag:TEXT_VIEW_TAG];
    textView.frame = CGRectMake(30.0f,200.0f,self.view.frame.size.width - 60.0f,380.0f);
}

再一次见证了不用IB的方便,还有控件的大小尽量不要用具体的数字,用self.view.frame.size.width,….代替.如:
table = [[UITableView alloc] initWithFrame:CGRectMake(0.0f,0.0f,self.view.frame.size.width,self.view.frame.size.height) style: UITableViewStyleGrouped];

8 关于ICON图标,准备3张图:72×72(MyLargeIcon.png),57×57(Icon.png),48×48(MySmallIcon.png)
 
搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:在iPhone开发领域取得成功的10个技巧与启示
下一篇:iPhone的九宫格实现代码
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部