热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS图标icon和启动页launchimage的尺寸适配

AppIconhttps:developer.apple.comlibraryiosdocumentationUserExperienceConceptualMobileHIGIco

酷AppIcon

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html#//apple_ref/doc/uid/TP40006556-CH27-SW1

Table 39-1Size (in pixels) of custom icons and images

Asset

iPhone 6 Plus (@3x)

iPhone 6 and iPhone 5 (@2x)

iPhone 4s (@2x)

iPad and iPad mini (@2x)

iPad 2 and iPad mini (@1x)

App icon (required for all apps)

180 x 180

120 x 120

120 x 120

152 x 152

76 x 76

App icon for the App Store (required for all apps)

1024 x 1024

1024 x 1024

1024 x 1024

1024 x 1024

1024 x 1024

Launch file or image (required for all apps)

Use a launch file (seeLaunch Images)

For iPhone 6, use a launch file (see Launch Images)

For iPhone 5, 640 x 1136

640 x 960

1536 x 2048 (portrait)

2048 x 1536 (landscape)

768 x 1024 (portrait)

1024 x 768 (landscape)

Spotlight search results icon (recommended)

120 x 120

80 x 80

80 x 80

80 x 80

40 x 40

Settings icon (recommended)

87 x 87

58 x 58

58 x 58

58 x 58

29 x 29

Toolbar and navigation bar icon (optional)

About 66 x 66

About 44 x 44

About 44 x 44

About 44 x 44

About 22 x 22

Tab bar icon (optional)

About 75 x 75 (maximum: 144 x 96)

About 50 x 50 (maximum: 96 x 64)

About 50 x 50 (maximum: 96 x 64)

About 50 x 50 (maximum: 96 x 64)

About 25 x 25 (maximum: 48 x 32)

Default Newsstand cover icon for the App Store (required for Newsstand apps)

At least 1024 pixels on the longest edge

At least 1024 pixels on the longest edge

At least 1024 pixels on the longest edge

At least 1024 pixels on the longest edge

At least 512 pixels on the longest edge

Web clip icon (recommended for web apps and websites)

180 x 180

120 x 120

120 x 120

152 x 152

76 x 76

 

 

iphone6/6+ 更新:

Icon-Small@3x.png     87*87

Icon-40@3x.png           120*120

Icon-60@3x.png           180*180

Icon.png                        57*57

Icon@2x.png                114*114

Icon-Small.png                29*29

Icon-Small@2x.png            58*58

Icon-Small-50.png            50*50

Icon-Small-50@2x.png        100*100

Icon-72.png                    72*72

Icon-72@2x.png                144*144

Icon-40.png                    40*40

Icon-40@2x.png                80*80

Icon-60.png                    60*60

Icon-60@2x.png                120*120

Icon-76.png                    76*76

Icon-76@2x.png                152*152

 

 酷LaunchImage

 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LaunchImages.html#//apple_ref/doc/uid/TP40006556-CH22-SW1

For iPhone 6

750 x 1334 (@2x) for portrait

1334 x 750 (@2x) for landscape

For iPhone 6 Plus:

1242 x 2208 (@3x) for portrait

2208 x 1242 (@3x) for landscape

---------------------------------------------------------------------

 

4.0 inch screen:

Default-568h@2x.png (old 640x1136 ~ for iPhone 5)

4.0 inch screen: 

LaunchImage-700-568h@2x.png (new 640x1136 ~ for iPhone 5)

 

4.7 inch screen: 

LaunchImage-800-667h@2x.png (750x1334 ~ for iPhone 6)

 

5.5 inch screen: 

LaunchImage-800-Portrait-736h@3x.png (1242x2208 ~ for iPhone 6 Plus Portrait)

5.5 inch screen: 

LaunchImage-800-Landscape-736h@3x.png (2208x1242 ~ for iPhone 6 Plus Landscape)

 

Retina iPad:

Default-Portrait@2x~ipad.png (1536x2048 ~ for Retina  iPad Portrait)

Retina iPad:

Default-Landscape@2x~ipad.png (2048x1536 ~ for Retina  iPad Landscape)

iPad Mini/iPad:

Default-Portrait~ipad.png (768x1024 ~ for  iPad Portrait)

iPad Mini/iPad:

Default-Landscape~ipad.png (1024x768 ~ for  iPad Landscape)

 

酷适配iphone6/6+启动界面

 

如果旧的工程直接跑到这两个模拟器中时,默认是"兼容模式",即系统会简单的把内容等比例放大,显示效果有些模糊但尚可接受。此时App内部获取到的设备分辨率和iPhone5是一样的:320*568 point。

 

启用高分辨率模式有2个方法:

1.添加大屏的LaunchImage:

在Images.xcassets里,删除旧的LaunchImage组,然后新建LaunchImage组,添加对应高分辨率的图片。(参考:http://matthewpalmer.net/blog/2014/09/10/iphone-6-plus-launch-image-adaptive-mode/)



 

2.添加Launch Screen File

Launch Screen是Xcode6和iOS8新加的功能,它用一个xib文件来作为启动画面。App在旧版iOS(低于ios8)启动时,该属性会被自动忽略,不会造成异常。

首先,点击New File ->iOS User Interface ->Launch Screen,然后在工程设置项里启用它:

LaunchFile



 不过这个xib不能关联任何的代码(不能自定义View的Class,不能IBOutlet,不能加Object),可以理解成这个xib就是一张截图,这个方案的好处在于可以使用到Size Classes来针对不同屏幕布局这个xib。

 

上面两处设置,只要启用任意一个即可让App进入高分辨率模式;但如果两处都没有设置,则App会回退到兼容模式。

两处都设定的话在ios8会走Launch Screen File,在低于ios8 走LaunchImage

 

PS:iPhone4、iPhone5、iPhone6这几个设备的ppi都是相同的,默认图片优先是@2x。iPhone6 Plus的像素密度更高,默认图片优先是@3x。 另外,iPhone6 Plus有一点和其他设备不同:在App内部获得的屏幕分辨率是1242*2208,但设备实际分辨率是1920*1080,这时系统会把整体的显示内容做一个缩放,downscale到1/1.15。

 

 

 

 

酷 UIPageControl的autoresizingMask

 

在设置UIPageControl实例的宽度时,显示的好像总是设置的四倍左右,但是把其他组建(UILable等)设置在同一父容器中显示的是正常的。头文件看到UIPageControl的autoresizingMask默认值是UIViewAutoresizingNone,但是感觉没起作用,于是这是下

Java代码  收藏代码
  1. _mainPageControl.autoresizingMask = UIViewAutoresizingNone;  

 UIPageControl显示正确了。(apple的bug?)

 

酷UIActivityViewController crashing on iPads by sdk8

其老早在 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActivityViewController_Class/ 中就说了:On iPad, you must present the view controller in a popover. On iPhone and iPod touch, you must present it modally

在sdk8之前你ipad还是用了presentViewController,那在dismissViewControllerAnimated的时候屏幕会旋转下,可能你还能接受,但是在sdk8便会直接crash,报错:

 

Java代码  收藏代码
  1. 2014-10-15 14:03:25.927 BT2014[5133:488272] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x145578890>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.'  
  2. *** First throw call stack:  
  3. (0x187d9e084 0x1986900e4 0x18cc56bf0 0x18c81e3f8 0x18c81cf30 0x18c5a2efc 0x18c5149c0 0x187d56388 0x187d53314 0x187d536f4 0x187c81664 0x190d7f5a4 0x18c5864f8 0x1000c574c 0x198cfea08)  
  4. libc++abi.dylib: terminating with uncaught exception of type NSException  
 所以用sdk8编译时ipad用pop,并且用新类:UIPopoverPresentationController

 

 

酷UIActivityViewController

Java代码  收藏代码
  1. Accessing the Completion Handler  
  2. completionHandler  
  3.  (iOS 8.0)  
  4. The completion handler to execute after the activity view controller is dismissed.  
  5.   
  6. Declaration  
  7. OBJECTIVE-C  
  8. @property(nonatomic, copy) UIActivityViewControllerCompletionHandler completionHandler  
  9. Discussion  
  10. When the user-selected service finishes operating on the data, or when the user dismisses the view controller, the view controller executes this completion handler to let your app know the final result of the operation.  
  11.   
  12. Import Statement  
  13. Availability  
  14. Available in iOS 6.0 and later.  
  15.   
  16. Deprecated in iOS 8.0.  

 

酷"LaunchServices: invalidationHandler called" with UIActivityViewController iOS8

In iOS8 when I present or dismiss a UIActivityViewController, my app logs: "LaunchServices: invalidationHandler called"。

参考:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/index.html

https://devforums.apple.com/message/1049415#1049415

http://stackoverflow.com/questions/25192313/sharing-via-uiactivityviewcontroller-to-twitter-facebook-etc-causing-crash

可能是苹果的issue

 

酷ios sdk8/ios8 remoteNotification 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

在苹果UIApplication文件中说明:

@interface UIApplication (UIRemoteNotifications)

.

.

.

 

- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types NS_DEPRECATED_IOS(3_0, 8_0, "Please use registerForRemoteNotifications and registerUserNotificationSettings: instead");

 

// Returns the enabled types, also taking into account any systemwide settings; doesn't relate to connectivity.

- (UIRemoteNotificationType)enabledRemoteNotificationTypes NS_DEPRECATED_IOS(3_0, 8_0, "Please use -[UIApplication isRegisteredForRemoteNotifications], or -[UIApplication currentUserNotificationSettings] to retrieve user-enabled remote notification and user notification settings");

 

 

@end

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

所以在ios8中应该用的新的注册通知的代码:

C代码  收藏代码
  1. // IOS8 新的注册api  
  2.  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)  
  3.  {  
  4.      [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings  
  5.                                                                           settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)  
  6.                                                                           categories:nil]];  
  7.        
  8.        
  9.      [[UIApplication sharedApplication] registerForRemoteNotifications];  
  10.  }  
  11.  else  
  12.  {  
  13.      //原来注册通知的代码  
  14.      [[UIApplication sharedApplication] registerForRemoteNotificationTypes:  
  15.       (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];  
  16.  }  

 原本在IOS7当中 判断push是否打开的方法是:

Java代码  收藏代码
  1. UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];  
  2. return (types & UIRemoteNotificationTypeAlert);  

 

如果将这段代码使用在 IOS8当中,虽然不会出现crash的现象,但永远返回空。 在IOS8中,我们使用如下的新代码来取代以上的代码:

Java代码  收藏代码
  1. +(BOOL)enabledRemoteNotification{  
  2.     UIRemoteNotificationType types;  
  3.     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)  
  4.     {  
  5.         types = [[UIApplication sharedApplication] currentUserNotificationSettings].types;  
  6.     }  
  7.     else  
  8.     {  
  9.         types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];  
  10.     }  
  11.       
  12.       
  13.     return (types & UIRemoteNotificationTypeAlert);  
  14. }  

 

酷ios 8 - buttons in horizontal scroll view intercepting pan event - scroll does not work

 含有uibutton的ScrollView在iOS8中无法滚动的解决办法:

Java代码  收藏代码
  1. theScrollView.panGestureRecognizer.delaysTouchesBegan = theScrollView.delaysContentTouches  

 

 

 

 

 

 

 

 

 

 

酷

 

 




推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
author-avatar
D大龙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有