在.xib文件中设置UIView的动画

时间:2013-05-19 17:19:45

标签: ios xcode animation clock

我在Xcode中创建了一个程序来告诉时间。我希望有一个矩形,随着秒数的增加(时间进展)动画/变长,并在秒数达到60(然后回到0)时再次开始。我没有故事板,已经开始,所以我不想再回去重新开始。

我应该使用UIView实例并为'frame'属性设置动画吗?

这是我的时钟代码:

- (void)viewDidLoad
{
[self updateTime];

[super viewDidLoad];

hourFormatter = [[NSDateFormatter alloc] init];
hourFormatter.dateFormat = @"HH";
minuteFormatter = [[NSDateFormatter alloc] init];
minuteFormatter.dateFormat = @"mm";
secondFormatter = [[NSDateFormatter alloc] init];
secondFormatter.dateFormat = @"ss";    
}

- (void)updateTime {

[updateTimer invalidate];
updateTimer = nil;

currentTime = [NSDate date];
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setTimeStyle:NSDateFormatterMediumStyle];

hourLabel.text = [hourFormatter stringFromDate: currentTime];
minuteLabel.text = [minuteFormatter stringFromDate: currentTime];
secondLabel.text = [secondFormatter stringFromDate: currentTime];

updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
}

1 个答案:

答案 0 :(得分:1)

是的,您可以使用UIView并为其框架设置动画。

您不一定要使用计时器来执行此操作,只需将动画设置为在整个持续时间内运行并完成帧高度更改并使用计时器重新启动下一个动画。这将提供最流畅的动画。

要更新时间显示,您只需要每秒运行一次的计时器。

看看像这样运行动画:

CGRect frame = self.expandingTimeView.frame;
frame.height = 0;
self.expandingTimeView.frame = frame;

[UIView animateWithDuration:60
                 animations:^{
    frame.height = MAX_FRAME_HEIGHT;
    self.expandingTimeView.frame = frame;
}];

有一本很好的指南here

此代码将采用您的updateTime方法,我假设每分钟都会通过计时器调用。无论调用哪个视图属性,都需要更正expandingTimeView的名称,并且需要将MAX_FRAME_HEIGHT替换为视图在动画期间应增长的最大高度。

您可能希望有2个方法,1个包含视图动画(updateTimeView),每分钟调用一个,1个包含标签文本更新(updateTimeLabels),每秒调用一次。在这种情况下,应在viewWillAppear:

中创建2个计时器