2011-06-15 64 views
0

我正在創建一個視圖,並從左到右移動到屏幕上。我很難讓它按照我想要的方式工作,但是當我這樣做時,我對它的工作方式感到困惑。我不明白爲什麼/如何CGAffineTransformTranslate工作

我想我必須創建視圖關閉屏幕左側,然後使用CGAffineTransformTranslate將其移動到屏幕上。但是,我正在屏幕上創建它,但它仍然很好。我有點困惑。

在這裏,我創建視圖...

profileViewControllerForIPad = [[ProfileViewController alloc] initWithFrame:CGRectMake(0, 0, 512, 446)]; 

正如你所看到的原點是0,0。所以在屏幕上,對吧?

這裏是thransform ...

[UIView animateWithDuration:0.5 
     animations:^{ 
      self.view.transform = CGAffineTransformTranslate(CGAffineTransformIdentity,self.view.frame.size.width, 0.0);        
     } 
]; 

正如你可以看到我的tx值設置爲CGAffineTransformTranslate的寬度,我以爲是你希望它移動的像素數的值從它的當前位置,origin.x爲0,我期望它將它移動到屏幕中間某處。相反,它在它所在的位置是新的origin.x,正好在0,我想要它。

順便說一句CGAffineTransformIdentity很好地將視圖從屏幕上滑回。

有人可以向我解釋這一點。這些文件似乎有所不同。

感謝,

約翰

+0

所以它沒有將像素的寬度向右移動? – 2011-06-15 02:17:30

+0

如果您更清楚地識別各種物體,您的問題會更容易理解。你說:「我在這裏創建視圖...」但實際上你似乎在創建一個視圖控制器。目前還不清楚第二個片段中的「自我」是什麼。你談論「CGAffineTransformTranslate的寬度」,這是沒有意義的。我知道當你不真正理解正在發生的事情(因此這個問題)時很難清楚,但是我們更難以破譯你正在做的事情。它也可能有助於顯示更多的代碼。 – Caleb 2011-06-15 05:43:42

回答

1

我想我現在明白了。我認爲這取決於你何時執行CGAffineTransformTranslate。

如果您在創建對象並調用CGAffineTransformTranslate之前將其添加到它的超級視圖中,那麼當它添加到它的超級視圖時,它將顯示在允許它移動到其定義的位置的數量和方向CGAffineTransformTranslate調用。

如果另一方面想要移動的對象已經顯示,對象將從其當前位置移動到新位置。

在我創建一個新的UIView並希望它從屏幕左側滑入的情況下,如果我在創建並添加視圖的同時調用CGAffineTransformTranslate,我將不得不定義視圖的框架在屏幕上的最終位置。

或者,可以在計時器方法中調用CGAffineTransformTranslate。在這種情況下,您可以定義視圖的屏幕外框,將其添加到顯示屏並創建計時器。然後,定時器方法將使用CGAffineTransformTranslate在屏幕上移動它。

0

我認爲你可以爲你的viewControllers的視圖框架屬性( - animateWithDuration:animations :)設置動畫效果,而不是使用轉換,這更易於使用和理解。

相關問題