2011-10-18 74 views
0

我有這塊代碼放置在accelerometer: didAccelerate,它改變了圖像的裁剪。基本上,當你傾斜一個iPad的圖像被截斷(不調整),這正是我正在尋找的效果。注意:self.xPos受Accelerometer.x位置影響。動畫UIView/UIImageView的裁剪

UIImage *originalStringImage = [UIImage imageNamed:@"string.png"]; 
CGImageRef imageRef = CGImageCreateWithImageInRect([originalStringImage CGImage], CGRectMake(0.0f,0.0f, self.xPos+50.0f, 26.0f)); 
[self.stringImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
self.stringImageView.frame = CGRectMake(10.0f, self.stringYPos, self.xPos+50.0f, 26.0f); 

現在我想做同樣的事情,雖然作爲UIView動畫。這些UIView動畫參數之間的東西:

UIImageView *pageStringImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, placeString, 0.0f, 42.0f)]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDelay:2.0]; 
[UIView setAnimationDuration:3.0]; 
pageStringImageView.frame = CGRectMake(10.0f, placeString, 900.0f, 42.0f); 
UIImage *originalStringImage = [UIImage imageNamed:@"string.png"]; 
CGImageRef imageRef = CGImageCreateWithImageInRect([originalStringImage CGImage], CGRectMake(10.0f,placeString, pageStringImageView.frame.origin.x, 42.0f)); 
[pageStringImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
[UIView commitAnimations]; 

但上述不起作用。實際上它甚至不顯示圖像。我相信這裏的主要困難是在UIView動畫運行時動態改變圖像的大小。

任何建議或問題?

回答

4

如果您使用UIImageView.contentMode屬性)的縮放屬性,這應該相當簡單。

視圖 - 包括圖像視圖 - 可以以多種方式顯示那裏的內容。圖像視圖的默認設置是縮放內容,因此當您更改圖像的邊框時,會根據需要縮小/擴大。

因此,如果您要使用標準的UIView動畫塊來調整UIImageView的框架,它會爲圖片縮放或縮小設置動畫效果。但是如果你改變圖像視圖的.contentMode屬性,如果你改變框架,你可以讓它裁剪。

例如,UIViewContentModeLeft將使內容與視圖的左側對齊,因此如果您調整視圖的寬度,它將從右側「裁剪」。檢查UIView文檔以查看contentMode的所有值。所以基本上,只是動畫你的視圖的框架更改,但適當設置contentMode給你所需的裁剪效果。您可能需要確保您的視圖設置爲剪輯到邊界,儘管我有一種感覺,圖像視圖默認會執行此操作。

+0

你的回答非常豐富。做得好! –

+1

此外,剪輯到界限的部分造成了差異。沒有它,我無法得到它的工作:'imageview.clipsToBounds = YES' –