首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》27.4 弹簧动画

关灯直达底部

iOS 7提供了一套功能强大的物理引擎,可以模拟真实物理世界的各类效果,其中一个有趣的效果就是弹簧效果。如果将描述弹簧效果的时间函数曲线应用到动画中,就形成iOS 7中常见的弹簧动画。Apple提供了一个轻松为视图添加弹簧动画的方法,下面就使用该方法,为UITextfield对象添加一个从屏幕顶部降落下来的弹簧动画,使它像弹簧一样来回跳动。

打开BNRHypnosisViewController.m,首先在类扩展中添加一个UITextField属性textField。然后修改loadView方法,调整UITextField对象的起始位置,移动到屏幕顶部以外,再将该对象赋给textField属性,代码如下:

@interface BNRHypnosisViewController () <UITextFieldDelegate>

@property (nonatomic, weak) UITextField *textField;

@end

@implementation BNRHypnosisViewController

// 这里省略其他方法

- (void)loadView

{

CGRect frame = [UIScreen mainScreen].bounds;

BNRHypnosisView *backgroundView =

[[BNRHypnosisView alloc] initWithFrame:frame];

CGRect textFieldRect = CGRectMake(40, 70, 240, 30);

CGRect textFieldRect = CGRectMake(40, -20, 240, 30);

UITextField *textField = [[UITextField alloc] initWithFrame:textFieldRect];

// 设置UITextField对象的边框样式,便于查看它在屏幕上的位置

textField.borderStyle = UITextBorderStyleRoundedRect;

[backgroundView addSubview:textField];

self.textField = textField;

self.view = backgroundView;

}

@end

UITextField对象的动画最好在视图刚出现在屏幕上时就开始执行,因此动画代码应该写在viewDidAppear:中。

在BNRHypnosisViewController.m中覆盖viewDidAppear:方法,使用弹簧动画将UITextField对象再移动到之前的位置,代码如下:

- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

[UIView animateWithDuration:2.0

delay:0.0

usingSpringWithDamping:0.25

initialSpringVelocity:0.0

options:0

animations:^{

CGRect frame = CGRectMake(40, 70, 240, 30);

self.textField.frame = frame;

}

completion:NULL];

}

用于添加弹簧动画的方法看起来参数较多,但实际上每个参数的含义都非常直观:

构建并运行应用。UITextField对象会从屏幕顶部降落下来,然后像弹簧一样来回跳动,最后停止在与之前相同的位置。