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);
时间: 2025-01-05 06:07:40