[WWDC 2011 Summary & Practice] [AppFramwork] Session 100
What’s New in Cocoa Touch
WWDC 2011的视频真心不错,身为iOS开发者必看,但是光看也记不住什么,就发个博文一方面当做笔记,一方面与懒得看视频的人分享一下其中的部分内容.
虽然很久以前就把Session 100看完了,但还是决定先用这个练练手,内容我尽量覆盖全,并且提供一些我测试的例子,也会贴些图.写过博客的都知道贴图是很繁琐的,所以请原谅的我的懒惰,我真的没有那么充裕的时间去截很多图.
WWDC 2011视频以及 Keynote(PDF格式)下载详见这里http://developer.apple.com/videos/(需要注册个开发者账号,但是不是交$99那种,“野生“开发者即可)
UIStepper

一个新控件,附带很少的属性,和UIButton用法差不多:
UIStepper *stepper = [[UIStepper alloc] initWithFrame:CGRectMake(44, 44, 100, 44)];
[self.view addSubview:stepper];
[stepper addTarget:self action:@selector(stepperTouched:) forControlEvents:UIControlEventTouchUpInside];
- (void)stepperTouched:(id)sender {
NSLog(@"stepper touched");
}
UIAlertView
终于可以在AlerView里输入文字了,真是佩服iOS5之前那些牛人怎么想到AlertView的各种使用技巧的.
typedef enum {
UIAlertViewStyleDefault = 0,
UIAlertViewStyleSecureTextInput,
UIAlertViewStylePlainTextInput,
UIAlertViewStyleLoginAndPasswordInput
} UIAlertViewStyle;
@property(nonatomic,assign) UIAlertViewStyle alertViewStyle;
- (UITextField *)textFieldAtIndex:(NSInteger)textFieldIndex
UIScreenOverscanCompensation
跟外接屏幕有关,本人目前为止还没遇到使用这个功能的情景,不多评论
typedef enum {
UIScreenOverscanCompensationScale,
UIScreenOverscanCompensationInsetBounds,
UIScreenOverscanCompensationInsetApplicationFrame
} UIScreenOverscanCompensation;
@property(nonatomic) UIScreenOverscanCompensation
overscanCompensation;
UIScreen
可以像iOS一样调节亮度了,两个新属性:
@property (nonatomic) CGFloat brightness;
@property (nonatomic) BOOL wantsSoftwareDimming;
结合之前的UIStepper使用:
UIStepper *stepper = [[UIStepper alloc] initWithFrame:CGRectMake(44, 44, 100, 44)];
[stepper setMaximumValue:2.0];
[stepper setMinimumValue:-2.0];
[stepper setStepValue:0.1];
[self.view addSubview:stepper];
[stepper addTarget:self action:@selector(stepperTouched:) forControlEvents:UIControlEventTouchUpInside];
[[UIScreen mainScreen] setWantsSoftwareDimming:YES];
- (void)stepperTouched:(id)sender {
NSLog(@"stepper touched with value %f", [(UIStepper *)sender value]);
[[UIScreen mainScreen] setBrightness:[(UIStepper *)sender value]];
}
brightness范围在0.0-1.0,wantsSoftwareDimming是使用软件模拟来获得更低的亮度,但是开启会损失性能,本人实测似乎没有效果,或许是方法不对.鉴于不太实用,暂且搁置.
UIScrollView delegate
新增一个delegate:
- (void)scrollViewWillEndDragging:(UIScrollView *)sv
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)tCO;
velocity是拖动的手指离开屏幕时ScrollView的移动速度,targetContentOffset是scroll停止的位置,通过拦截这个delegate我们就可以设置Scroll操作停止的位置,而不只是任由用户控制.比如下图,我想要在用户Scroll时可以让ScrollView停止在每格的正中间,就可以通过这个Delegate设置

UIReferenceLibraryViewController
可以调用iOS5自带的字典,这个详细的参考文档吧
UITableView(Controller)/UISplitViewController
新增了一些delegate
- (BOOL)splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation;
- (BOOL)tableView:(UITableView *)tv
shouldShowMenuForRowAtIndexPath:(NSIndexPath *)ip;
- (BOOL)tableView:(UITableView *)tv
canPerformAction:(SEL)action
forRowAtIndexPath:(NSIndexPath *)ip;
- (void)tableView:(UITableView *)tv
performAction:(SEL)action
forRowAtIndexPath:(NSIndexPath *)indexPath;
UITableViewCell可以通过NIB文件重用了
- (void)registerNib:(UINib *)nib
forCellReuseIdentifier:(NSString *)identifier;
关于TableView的详细内容还要等到Session 125 UITableView Changes, Tips & Tricks
iPad Keyboard相关
UIWindow keyboard notifications,iPad的屏幕键盘可以移动,可以分成两块,下面两个就是支持这些操作的
NSString *const UIKeyboardWillChangeFrameNotification;
NSString *const UIKeyboardDidChangeFrameNotification;
UIImage
新增两个工厂方法:
+ (UIImage *)animatedImageNamed:(NSString *)name
duration:(NSTimeInterval)duration;
+ (UIImage *)animatedImageWithImages:(NSArray *)images
duration:(NSTimeInterval)duration;
@property (nonatomic, readonly) NSArray *images;
@property (nonatomic, readonly) NSTimeInterval duration;
可以把多个图片放到一个UIImage里,显示时就可以顺序切换图片,和gif动画效果一样.
此外还有:
-(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)i;
+(UIImage *)animatedResizableImageNamed:(NSString *)name
capInsets:(UIEdgeInsets)capInsets
duration:(NSTimeInterval)duration;
设置一个图片的缩放范围,比如:可以不缩放外围的圆角,而只缩放中间部分,这个详细的看文档吧.
StoryBoard
简单的说就是可以直接在InterfaceBuilder里面添加ViewController之间切换流程,App速成更方便了. 具体内容在Session 309 Introducing Interface Builder Storyboarding
Appearance Proxy(UIAppearance protocol)
可以为某一种控件设置样式,对App中所有相同控件有效
[[UISlider appearance] setMinimumTrackTintColor:[UIColor redColor]];
具体内容在Session 114 Customizing the Appearance of UIKit Controls
UIPageViewController
可以像iBooks那样翻页了,效果和iBooks相同没有任何缩水
Creating
- (id)initWithTransitionStyle:
(UIPageViewControllerTransitionStyle)style
navigationOrientation:
(UIPageViewControllerNavigationOrientation)orientation options:(NSDictionary *)options;
id <UIPageViewControllerDelegate> delegate;
id <UIPageViewControllerDataSource> dataSource;
UIPageViewControllerDelegate
- (void)pageViewController:(UIPageViewController *)pvc
didFinishAnimating:(BOOL)finished
previousViewControllers:(NSArray *)prevViewCs
transitionCompleted:(BOOL)completed;
- (UIPageViewControllerSpineLocation)
pageViewController:(...)pvc
spineLocationForInterfaceOrientation:(...)o;
UIPageViewControllerDataSource
- (UIViewController *)
pageViewController:(UIPageViewController *)pvc
viewControllerBeforeViewController:(UIViewController*)c;
- (UIViewController *)
pageViewController:(UIPageViewController *)pvc
viewControllerAfterViewController:(UIViewController *)c;
UIViewController
开放了一些API方便开发者写自定的Container
-(void)addChildViewController:(UIViewController *)cvc;
-(void)removeFromParentViewController;
@property (readonly) NSArray *childViewControllers;
-(void)transitionFromViewController:(UIViewController *)fVC
toViewController:(UIViewController *)toViewController
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
具体在Session 102 Implementing UIViewController Containment
UIDocument
文件操作,有很方便的错误处理:
- (id)initWithFileURL:(NSURL *)url;
@property (readonly) NSURL *fileURL;
@property (readonly, copy) NSString *localizedName;
@property (readonly, copy) NSString *fileType; @property (copy) NSDate *fileModificationDate;
@property (retain) NSUndoManager *undoManager;
- (void)openWithCompletionHandler:
(void (^)(BOOL success))completionHandler;
- (void)closeWithCompletionHandler:
(void (^)(BOOL success))completionHandler;
- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError;
- (id)contentsForType:(NSString *)typeName error:(NSError **)outError;
- (void)handleError:(NSError *)error userInteractionPermitted:(BOOL)interactionPermitted;
- (void)finishedHandlingError:(NSError *)error recovered:(BOOL)recovered;
- (void)userInteractionNoLongerPermittedForError:(NSError *)error;
enum {
UIDocumentStateNormal,
UIDocumentStateClosed = 1 << 0,
UIDocumentStateInConflict = 1 << 1,
UIDocumentStateSavingError = 1 << 2,
UIDocumentStateEditingDisabled = 1 << 3
};
typedef NSInteger UIDocumentState;
@property (readonly) UIDocumentState documentState; NSString *const UIDocumentStateChangedNotification;
具体在Session 116 Storing Documents in iCloud Using iOS 5
AssetsLibrary
没接触过这部分:
• ALAssetsLibrary
- (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)r;
• ALAssetsGroup
- (BOOL)addAsset:(ALAsset *)asset;
• Modifying assets
-(void)writeModifiedImageDataToSavedPhotosAlbum:(NSData *)d
metadata:(NSDictionary *)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)block;
-(void)setImageData:(NSData *)data
metadata:(NSDictionary *)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)block;
其他更新
- GameKit
Session 402 403 Essential Game Technologies for iOS
- Core Data
What’s New in Core Data on iOS
- NewsstandKit
Building Newsstand Apps
Session 124 Twitter Integration
- CoreImage
Session 422 Using Core Image on iOS & Mac OS X
- GLKit
Session 414 Advances in OpenGL ES for iOS 5
Session 100 只是简短的介绍一下iOS 5的新增内容,视频还是值得一看的,各位开发者不要错过
—以上—