2011-09-23 92 views
1

我有要翻轉呈扁平狀倒裝時鐘確實一個UIImage視圖。這是水平面的第一部分(我將更改圖像或添加新視圖或其他東西)。我的問題是讓視圖在底部軸上翻轉。它是100px的正方形。我怎樣才能讓它通過底部軸旋轉。我已經閱讀了許多堆棧問題和答案,使用了它,以及我曾經無法解答的問題。這是我看到的最接近我的動作,它在動畫之前移動了視圖,我無法讓它翻轉但保持靜止。在應用的http://www.voyce.com/index.php/2010/04/10/creating-an-ipad-flip-clock-with-core-animation/動畫節旋轉圍繞底部軸線一個UIImageView - 目標C /的iOS

看又好像我有軸正確的,但我顯然不!

[UIView beginAnimations:nil context:nil]; 

[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

boxView.center = CGPointMake(0.5, 1); 

boxViewImage.layer.anchorPoint = CGPointMake(0.5, 1); 
boxViewImage.layer.transform = CATransform3DMakeRotation(M_PI_2,-1.0,0,0); 

[UIView commitAnimations]; 

boxViewImage是一個UIImageView

我需要什麼添加到代碼能在正確的方式翻轉?一直試圖做2天吧!

編輯:

我分配的UIImageView這一點:

CGRect frameRect = CGRectMake(0, 0, 100,100); 
boxViewImage = [[UIImageView alloc] initWithFrame:frameRect]; 
boxViewImage.image = [UIImage imageNamed:@"1.png"]; 
[self.view addSubview:boxViewImage]; 

編輯2:

我發現,如果我創造我的UIImageView當我點擊(不是我想做的事)在視圖加載後,它也旋轉到我想要的位置。我認爲這可能是由於UINavigationController具有高度,因爲偏移似乎與它的高度相同!

回答

5

你有幾件事錯在你的代碼。

首先,我不知道你爲什麼要設置boxView.center到(0.5:1)。其次,您不應該在動畫塊中設置錨點,第三個M_PI_2只是您真正想要的一半動畫。

這裏是解決方案。我使用UILabel而不是UIImageView。

UILabel *testLabel = [[[UILabel alloc] initWithFrame:CGRectMake(20, 20, 100, 100)] autorelease]; 
testLabel.backgroundColor = [UIColor blackColor]; 
testLabel.text = @"Test"; 
testLabel.textColor = [UIColor whiteColor]; 
[self.view addSubview:testLabel]; 
testLabel.layer.anchorPoint = CGPointMake(0.5, 1);  

[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        testLabel.layer.transform = CATransform3DMakeRotation(M_PI, -1, 0, 0);       
       } 
       completion:^(BOOL finished) { 
       }]; 
+0

謝謝,這已經開始清理的東西了,但由於某種原因,它似乎仍然旋轉阿博距離基線20%/ 20px。導航控制器會對座標有什麼影響嗎? – Designer023

+0

ps我正在使用M_PI_2,因爲我要在高點交換圖像。也許這不是最好的方法! – Designer023

+0

哦,我明白了。 20%是一個謎。我不知道它爲什麼這樣做。我發送的代碼在我的項目中工作得很好。 – Split

0

我實際上是用語音教程做了一個小框架。也許這可以幫助:

https://github.com/jaydee3/JDFlipNumberView

它包含三類:

  • JDFlipNumberView(單個動畫數字)
  • JDGroupedFlipNumberView(分組及鏈接flipviews的可選擇的數量較高的數字)
  • JDDateCountdownFlipView(日期倒計時,只是初始化一個日期,設置一個框架,你去了。)

在任何情況下,你只需要做三個步驟:

  1. 初始化類
  2. 設置一個int值(或日期)
  3. 啓動動畫