动画条随着时间的增加而上升

时间:2013-08-03 09:52:56

标签: ios nstimer uianimation

我有一些代码可以在不同的部分(小时,分钟,秒)显示时间。

- (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];
}

我希望有三个小时(小时,分钟,秒)随着时间的推移而上升。完全像这个cydia锁屏调整:http://patrickmuff.ch/repo/

编辑:我应该补充一点,我对Objective-C非常新,而且非常缺乏经验,所以非常感谢任何提示/帮助!

1 个答案:

答案 0 :(得分:1)

您目前正在获取单位数(小时,分钟,秒)的文字 - 您需要获取这些数字的floatint版本并使用它们来设置'boxes'(应该是UIView个实例)。

您显示的屏幕截图实际上是通过将视图框设置为相同大小并使用半透明背景颜色来完成的。然后,每个视图都有一个子视图,您可以使用单位值设置框架高度。并且子视图将具有完全不透明的背景颜色。

当然,这可以通过核心图形完成,而不是使用视图。


好的,从您的评论中,很好,背景很好。在您的XIB中,创建3个视图并将它们放在背景区域上。将插座连接到它们,以便您可以在代码中使用它们。将背景颜色和高度设置为零。

在你的代码中,每次获得新单位值时,修改视图框(增加高度并减少'y'位置),类似于(写在我的头顶):

NSInteger hours = ...;

CGRect frame = self.hoursView.frame;

if ((NSInteger)frame.size.height != hours) { // check if we need to modify
    frame.origin.y -= (hours - frame.size.height);
    frame.size.height = hours;

    self.hoursView.frame = frame;
}