2013-05-19 80 views
0

我在Xcode中製作了一個講述時間的程序。我想要一個矩形,隨着秒數的增加(時間進度),動畫/增長得更長,並在秒數達到60(並回到0)時重新開始。我沒有故事板,並已經開始,所以我不想回去重新開始。在.xib文件中設置UIView的動畫效果

我應該使用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]; 
} 
+0

我應該使用UIView實例併爲'frame'屬性設置動畫嗎? – user2397282

回答

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

您可能希望有兩種方法,一種包含視圖動畫(updateTimeView),每分鐘呼叫一次,另一種包含標籤文本更新(updateTimeLabels),每秒調用一次。在這種情況下,應創建2個定時器viewWillAppear:

+0

如果不是太麻煩,你介意告訴我我將如何聲明和實施這個動畫?謝謝 – user2397282

+0

對不起,我是Objective-C的新手,我宣佈了一個UIView並將其鏈接到.xib文件。我應該把你的代碼放在哪裏,我是否需要聲明新的東西,更改變量名稱等? – user2397282