斯坦福大学-IOS7应用开发总结

Lecture 4

1. 如果某个文本内容的字体需要根据用户的设置来调整大小的话,我们可以选用如下方法来设置该文本的字体:

[UIFont preferredFontForTextStyle:UIFontTextStyleBody];
//而不是如下固定的使用系统字体
[UIFont systemFontOfSize:12];

2. 使用UIFontDescriptor类来为现有字体添加额外的属性:

UIFont *bodyFont = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
UIFontDescriptor *existingDescriptor = [bodyFont fontDescriptor];
UIFontDescriptorSymbolicTraits traits = existingDescriptor.symbolicTraits;
traits |= UIFontDescriptorTraitBold;
UIFontDescriptor *newDescriptor = [existingDescriptor fontDescriptorWithSymbolicTraits:traits];
UIFont *boldBodyFont = [UIFont fontWithDescriptor:newDescriptor size:0];//0为任意大小

3. 通过NSMutableAttributedString类给文本添加样式:

UIColor *yellow = [UIColor yellowColor];
UIColor *transparentYellow = [yellow colorWithAlphaComponent:0.3];
 @{ NSFontAttributeName :
      [UIFont preferredFontWithTextStyle:UIFontTextStyleHeadline]
   NSForegroundColorAttributeName : [UIColor greenColor],
   NSStrokeWidthAttributeName : @-5,
   NSStrokeColorAttributeName : [UIColor redColor],
   NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone),
   NSBackgroundColorAttributeName : transparentYellow }
// UIButton’s - (void)setAttributedTitle:(NSAttributedString *)title forState:...; 
// UILabel’s @property (nonatomic, strong) NSAttributedString *attributedText; 
// UITextView’s @property (nonatomic, readonly) NSTextStorage *textStorage;

Lecture 5

1.View Controller lifeCycle

//在控制器初始化完成并且outlet被设置后调用
- (void)viewDidLoad { [super viewDidLoad]; // always let super have a chance in lifecycle methods // do some setup of my MVC }
//此方法需要注意的是在来到这个方法时,视图的大小还没有确定,即view的frame还是未知的,因此不要在此方法里面做一些初始化size的操作。
// 在视图即将显示在屏幕上时调用
- (void)viewWillAppear:(BOOL)animated;
// 注意:此方法随着视图的显示与隐藏会调用多次,而视图只loaded一次,因为不要在这里面做太多事情,如果是会经常变化的操作,可以在此方法中。
// 在视图即将消失时调用
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
// 一般在此方法中做一些代码清理工作,释放内存
// 在view的frame被改变或其subviews改变的任务时候都会被调用
- (void)view{Will,Did}LayoutSubviews;
// 一般设置视图或子视图的frame操作都在此方法中进行
// 当使用storyboard创建视图控制器时,在outlet被设置之前会调用此方法
- (void)awakeFromNib{}
// 注意的是,如果视图控制器是在storyboard创建,将不会再调用默认的初始化方法,所以一些初始化的操作应该放在此方法中来执行。

 Lecture 8

1. Dynamic Animation

创建动态动画:重力、碰撞。步骤:

a. 创建一个UIDynamicAnimator对象

b. 添加一个行为对象UIDynamicBehaviors(一般是其子类:重力gravity、碰撞collisions、吸附attachment等)

c. 添加一个UIDynamicItems(一般是UIViews)到上面的行为对象中

如:

UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:aView];
UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init]; [animator addBehavior:gravity];
UICollisionBehavior *collider = [[UICollisionBehavior alloc] init]; [animator addBehavior:collider];
id <UIDynamicItem> item1 = ...; 
id <UIDynamicItem> item2 = ...; 
[gravity addItem:item1]; 
[collider addItem:item1];
[gravity addItem:item2];

任务对象都可以作为UIDynamicItem,前提是需要实现<UIDynamicItem>协议。UIView默认实现了此协议。

其中,我们也可以创建自定义的UIDynamicBehavior对象(它是所有行为的父类),在初始化方法中添加想要添加的行为(可以多个),这样就能实现将多个子行为动画的封装。通过下面的方法可以添加子行为:

- (void)addChildBehavior:(UIDynamicBehavior *)behavior;

当行为被执行时,会调用一个名为actoin的block方法。默认是没有实现的,如果我们要在此过程做些什么的话,可以实现该block。

@property (copy) void (^action)(void);

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。