AppIconhtml
Assetios
iPhone 6 Plus (@3x)c++
iPhone 6 and iPhone 5 (@2x)web
iPhone 4s (@2x)api
iPad and iPad mini (@2x)app
iPad 2 and iPad mini (@1x)iphone
App icon (required for all apps)ide |
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
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:iPhone四、iPhone五、iPhone6這幾個設備的ppi都是相同的,默認圖片優先是@2x。iPhone6 Plus的像素密度更高,默認圖片優先是@3x。 另外,iPhone6 Plus有一點和其餘設備不一樣:在App內部得到的屏幕分辨率是1242*2208,但設備實際分辨率是1920*1080,這時系統會把總體的顯示內容作一個縮放,downscale到1/1.15。
UIPageControl的autoresizingMask
在設置UIPageControl實例的寬度時,顯示的好像老是設置的四倍左右,可是把其餘組建(UILable等)設置在同一父容器中顯示的是正常的。頭文件看到UIPageControl的autoresizingMask默認值是UIViewAutoresizingNone,可是感受沒起做用,因而這是下
_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,報錯:
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.' *** First throw call stack: (0x187d9e084 0x1986900e4 0x18cc56bf0 0x18c81e3f8 0x18c81cf30 0x18c5a2efc 0x18c5149c0 0x187d56388 0x187d53314 0x187d536f4 0x187c81664 0x190d7f5a4 0x18c5864f8 0x1000c574c 0x198cfea08) libc++abi.dylib: terminating with uncaught exception of type NSException因此用sdk8編譯時ipad用pop,而且用新類:UIPopoverPresentationController
UIActivityViewController
Accessing the Completion Handler completionHandler (iOS 8.0) The completion handler to execute after the activity view controller is dismissed. Declaration OBJECTIVE-C @property(nonatomic, copy) UIActivityViewControllerCompletionHandler completionHandler Discussion 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. Import Statement Availability Available in iOS 6.0 and later. 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中應該用的新的註冊通知的代碼:
// IOS8 新的註冊api if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { //原來註冊通知的代碼 [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; }
本來在IOS7當中 判斷push是否打開的方法是:
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; return (types & UIRemoteNotificationTypeAlert);
若是將這段代碼使用在 IOS8當中,雖然不會出現crash的現象,但永遠返回空。 在IOS8中,咱們使用以下的新代碼來取代以上的代碼:
+(BOOL)enabledRemoteNotification{ UIRemoteNotificationType types; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { types = [[UIApplication sharedApplication] currentUserNotificationSettings].types; } else { types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; } return (types & UIRemoteNotificationTypeAlert); }
ios 8 - buttons in horizontal scroll view intercepting pan event - scroll does not work
含有uibutton的ScrollView在iOS8中沒法滾動的解決辦法: