2012-12-04 38 views
9

我開始使用iPhone and iPad apps for Absolute Beginners by Rory Lewis書研究objective-c,但我陷入了第5章。CGAffine轉換並縮放到圖像的中心

我想製作縮小圖像的按鈕。
我的問題是,在我編寫所有代碼後,圖像縮小到UIImageView(左上角)的點(0,0),而在視頻中圖像縮小到其中心位置。我已經做了一些研究,發現CGAffineTransform使用對象的中心進行翻譯,旋轉等。

那麼爲什麼它不起作用在我的情況?

我有最新的Xcode版本,並沒有做任何奇怪的事情。 我希望我已經清楚。對不起我的英語不好。

編輯 對不起,但我從我的手機寫了問題。 但無論如何,牽連的部分是這樣的

- (IBAction)shrink:(id)sender { 

if(hasShrink == NO){ 
    [shrinkButton setTitle:@"Grow" forState:UIControlStateNormal]; 
} 
else if(hasShrink == YES){ 
    [shrinkButton setTitle:@"Shrink" forState:UIControlStateNormal]; 
} 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:1.0]; 
     myIcon.transform = CGAffineTransformMakeScale(.25, .25); 
     hasShrink = YES; 
     [UIView commitAnimations]; 

}

所有動畫正確寫入和應用工作,它只是縮小到左上角。爲什麼默認情況下該點並未設置爲UIImageView的中心?

編輯: 我覺得這是一個由AutoLayout造成的問題。 一旦停用一切都進行得很順利;)

+2

您可以發佈您使用的代碼嗎? –

+0

編輯代碼;) – halfblood17

回答

7

如果您正在轉換視圖 受自動佈局管理的損壞 ,您可能會遇到一些奇怪的副作用。See this answer for more details.

我最終採用的解決方案是封裝我想在完全相同大小的另一視圖中轉換的視圖。外部視圖具有適當的佈局約束,而內部視圖僅在其容器中居中。現在將適當的CGAffineTransform縮放比例轉換爲內部視圖。

+0

謝謝,這幫了我很多! – aparesidam

6

嘗試是這樣的:

CGAffineTransform t = CGAffineTransformMakeScale(0.5, 0.5); 
CGPoint center = imageView.center; // or any point you want 
[UIView animateWithDuration:0.5 
       animations:^{ 
        imageView.transform = t; 
        imageView.center = center; 
       } 
       completion:^(BOOL finished) { 
        /* do something next */ 
       }]; 

下一次展現你的代碼。幫助你會更容易。

檢查項目:https://github.com/djromero/StackOverflow/archive/Q-13706255.zip

你必須學習自動佈局和自動調整如何影響你的觀點。在上面的項目中都禁用,讓你看看它是如何工作的。

+0

我已經按照你所說的做了,但如果我打印的值爲 'myImage.center.x'和'myImage.center.y',它會一直指向左上角。 我已經嘗試了3次重新啓動項目,並且仍然存在相同的問題,甚至只寫了縮小按鈕的代碼。如果(hasMoved == NO && hasShrink == NO){ [UIView beginAnimations:nil context:nil];(IBAction)縮小:(id)發送者。 [UIView setAnimationDuration:1.0]; _myIcon.transform = sizeShrink; hasShrink = YES; [UIView commitAnimations];' – halfblood17

+0

如果你使用的代碼你沒有做我說的。請更新與您的來源的問題,不要添加評論(難以閱讀,而不是正確的地方)。 – djromero

+0

好的,我會解決這個問題。但我仍然試圖只使用你的代碼,沒有任何改變。它仍然在移動時調整大小。 – halfblood17

8

老問題...但以防萬一別人來找:

CGAffineTransform行爲(旋轉,縮放)圍繞anchorPoint。

如果您調整爲0,0,則將您的錨點設置爲0,0。如果您希望將其大小設置爲不同的點(例如圖像中心),則需要更改錨點。

的錨是層

所以的一部分,如果你有一個UIImageViewimageview,你會撥打電話這樣的錨設定的ImageView的中心:

[imageview.layer setAnchorPoint:CGPointMake(0.5, 0.5)]; 
+3

'anchorPoint'以相對值進行度量,默認爲0.5,0.5,這是視圖的中心。使用像素值不會給你預期的結果。 – devios1

+0

謝謝...好點! – HalR