2011-10-18 11 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' –

関連する問題