我在新的iOS developement.When我按下秒錶開始按鈕,我想顯示像櫃檯令牌effect.I定時器附上圖片汽油泵儀爲您reference.I已經做顯示秒和分鐘,但我不知道,如何動畫自動滾動效果?我怎樣才能做到這一點?顯示秒錶計時動畫喜歡使用的NSTimer
當計數器在移動它不應該從一個數字跳到另一個數字,而是應該平滑地從一個數字移動到下一個數字,就像汽油泵米。由於
我在新的iOS developement.When我按下秒錶開始按鈕,我想顯示像櫃檯令牌effect.I定時器附上圖片汽油泵儀爲您reference.I已經做顯示秒和分鐘,但我不知道,如何動畫自動滾動效果?我怎樣才能做到這一點?顯示秒錶計時動畫喜歡使用的NSTimer
當計數器在移動它不應該從一個數字跳到另一個數字,而是應該平滑地從一個數字移動到下一個數字,就像汽油泵米。由於
您需要手動滾動tableView而不是scrollToRowAtIndexPath
,因爲此動畫使用自己的計時器間隔,而且非常困難,或者我們可以說不可能改變其時間間隔。
所以,我對實施這類問題的API,並做了一個演示應用程序爲您提供平滑滾動,只要你想。
您需要使用外部定時器觸發間隔爲1秒,內部計時器,將觸發每0.03秒是我tablerow的高度爲30我計算內部定時器的時間間隔爲:---
移動30個像素1秒,然後 在內部定時器內移動1像素0.33秒。
內部定時器將在外部定時器中初始化時每1秒失效並觸發一次。
並且內部定時器將執行單元的移動。
dial4是的tableView
看一看我的代碼。
#define rowHeight 30
-(void)startCounter
{
outertimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(snapCell) userInfo:nil repeats:YES];
}
-(void)stopCounter
{
[outertimer invalidate];
}
-(void)snapCell
{
NSLog(@"Initialize Internal timer %i",secLsb);
secLsb++;
if (secLsb==10) {
[dial4 setContentOffset:CGPointMake(0, 0) animated:NO];
secLsb=0;
NSLog(@"dial content offset y is %f",dial4.contentOffset.y);
}
[internaltimer invalidate];
internaltimer=[NSTimer scheduledTimerWithTimeInterval:0.03
target:self
selector:@selector(automaticScroll)
userInfo:nil
repeats:YES];
}
-(void)automaticScroll
{
NSLog(@"val is & y ======== %f",dial4.contentOffset.y);
[dial4 setContentOffset:CGPointMake(dial4.contentOffset.x,dial4.contentOffset.y+1) animated:NO];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return rowHeight;
}
看一看這裏Time Counter
它不會使用'UIView'動畫來控制你的表視圖的'contentOffset'而不是實現你自己的計時器? – nielsbot
我做了這樣的事情之前 - 這段代碼不一定乾淨,但它的工作。
你想在你的.h文件中創建兩個UILabel
S:
IBOutlet UILabel *figureLabel1;
IBOutlet UILabel *figureLabel2;
然後你想創建一個BOOL
這樣我們就可以分辨出哪UILabel
是對用戶可見。
BOOL firstLabel;
因此,讓想象的初始標籤(示出了編號爲1)是figureLabel1
和將來UILabel
進行顯示(表示數字2)是figureLabel2
。但是,當櫃檯增加一個,那麼figureLabel2
上移並採取figureLabel1
的地方。然後,當figureLabel1
被隱藏時,當figureLabel1
可見時,它代替figureLabel2
。
在這裏看到:
// Check what label is showing
if (firstLabel == YES) {
// Following code the hide and move the figureLabel1
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate: self]; //or some other object that has necessary method
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// Slowing fade out the figureLabel1
[figureLabel1 setAlpha:0];
// Move the figureLabel1 up and out of the way
[figureLabel1 setFrame:CGRectMake(20, 108, 287, 55)];
[UIView commitAnimations];
// Following code the show and move the figureLabel2
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
// Slowing fade in the figureLabel2
[figureLabel2 setAlpha:1];
// Move the figureLabel2 up and into position
[figureLabel2 setFrame:CGRectMake(20, 141, 287, 55)];
[UIView commitAnimations];
// Update BOOL for next label
firstLabel = NO;
} else {
// Exactly the same but opposite
}
正如我所說的,這是不漂亮,但它顯示了基本概念。祝一切順利!
基於塊的UIView動畫已被推薦超過begin動畫/ commitAnimations自ios4 – Abizern
從圖像可以假設你正在嘗試獲得倒計時的效果。在這裏看看countdown timer。它可以幫助你以某種方式。
享受編程!
只有鏈接的答案是不是很有幫助..請將答案添加到文本.. – Abizern
一些好的想法而已,但我會添加另一個。
首先,使用Interface Builder中的Clip Subviews複選框,確保將容器視圖(藍色矩形)設置爲剪輯子項。第二,添加一組子視圖,每個數字的圖像要顯示每個數字(在您的案例中4 * 10 = 40個子視圖)。在IB中使用標籤,以便您可以輕鬆訪問每個標籤。將初始邊界設置爲低於您的底部邊距。
調用UIView animateWithDuration。在動畫塊中,將新數字視圖的框架設置爲出現在剪裁的父視圖的邊界中,並將舊數字視圖的框架設置爲剛好在容器邊界之上。由於兩個視圖的框架更改都在同一個塊中進行動畫,所以這會在舊數字滑出頂部時創建新數字滑動到位的效果。
在完成塊中,將舊數字的框架設回容器視圖下的原始位置。
使用此方法,您可以使用持續時間和時間曲線進行播放,以便您可以模擬在每次轉換之間完全顯示的數字時發生的暫停。
類似的方法也可以用於CALayer或sprites,但UIViews輕量級,性能良好,並且最容易在Interface Builder中組裝。
您可以使用pickerview進行平滑滾動。 –
@Ravindhiran檢查出 – Warewolf