2011-10-18 5 views
0

나는 이미지의 자르기를 변경 accelerometer: didAccelerate에 배치 된이 코드 덩어리가 있습니다. 기본적으로 iPad를 기울이면 이미지가 잘 리거나 (크기가 조정되지 않음) 정확히 찾고 싶습니다. 참고 : self.xPos은 가속도계 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은보기의 왼쪽에 내용을 정렬하므로보기의 너비를 조정하면 오른쪽에서 '잘립니다'. contentMode에 대해 가질 수있는 모든 값을 보려면 UIView 설명서를 확인하십시오. 기본적으로보기 프레임 변경을 애니메이션으로 적용하지만 contentMode을 적절하게 설정하여 원하는 자르기 효과를 줄 수 있습니다. 기본적으로 이미지보기를 사용한다고해도 뷰가 경계에 맞게 설정되어 있는지 확인해야 할 수도 있습니다.

+0

귀하의 답변은 매우 유익했습니다. 잘 했어! –

+1

또한 경계 부분에 클립이 차이를 만들었습니다. 그것 없이는 작동하지 않을 수 있습니다 :'imageview.clipsToBounds = YES' –