2009-10-27 5 views
0

CGAffineTransformMake를 사용하여 UIImageView를 수직으로 뒤집습니다. 잘 작동하지만 UIImageview의 새로운 반전 된 위치를 저장하지 않는 것 같습니다. 두 번째로 반전하려고 시도 할 때 (아래의 라인 코드를 실행하십시오) 작동하지 않기 때문입니다.CGAffineTransformMake - UIimageview의 상태를 저장하는 방법

shape.transform = CGAffineTransformMake (1, 0, 0, 1, 0, 0);

도와주세요. 사전에

감사합니다. 게달

답변

0

그냥 이전 변환의 효과를 반전하려면

, 당신은 값 CGAffineTransformIdentity에 shape.transform 속성을 설정 들여다하실 수 있습니다.

뷰의 변형 속성을 설정하면 추가하지 않고 기존의 변형을 대체하게됩니다. 따라서 회전을 일으키는 변환을 지정하면 이전에 구성한 모든 플립을 잊어 버릴 수 있습니다.

이전에 변형 한 뷰에 추가 회전 또는 비율 조정 연산을 추가하려면 기존 변환을 지정할 수있는 함수를 조사해야합니다.

e.e. 대신 대체

shape.transform = CGAffineTransformMakeRotation(M_PI); 

을 사용하는 기존의 지정된 회전 변환, 당신은

shape.transform = CGAffineTransformRotate(shape.transform, M_PI); 

이가 회전을 적용 사용할 수있는 기존의 변환 (이제까지 즉 어떻게 될 것인가) 다음에 할당 보기. Apple's documentation for CGAffineTransformRotate을 보시면 조금 더 명확하게 알 수 있습니다.

설명서에 따르면 "아핀 변환을 다시 사용하지 않으려면 CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM 또는 CGContextConcatCTM을 사용할 수 있습니다."

+0

CGAffineTransformScale (기존 변환을 시작점으로 사용하여 변형을 만들 수 있음)과 같은 함수도 살펴볼 수 있습니다. –

+0

안녕하세요 Christopher, 응답 해 주셔서 감사합니다. 원래 게시물에서 언급 한 것처럼 내 문제는 이미지를 수직으로 뒤집어 씌우려 고합니다 (UIImageview 내부 이미지의 이미지를 대칭). 원래 게시물에 게시 된 코드 스 니펫은 정상적으로 작동하지만 UIImageview의 새로운 (뒤집힌) 상태 또는 변환을 저장하지 않습니다. 한 번 뒤집었기 때문에 뒤집힌 이미지에서 더 많은 회전을하고 싶습니다. 내가 뒤집어서 회전한다고 말하면 위의 코드로 UIImageview를 뒤집습니다. 회전을 클릭하면 뒤집힌 것이 아니라 원래 UIImageview가 회전합니다. 나는 당신을 혼란스럽게하지 않았 으면 좋겠다. –

5

변형은 예상대로 자동으로 추가/누적되지 않습니다. 변환을 지정하면 대상이 한 번 변형됩니다.

각 변형은 매우 구체적입니다. 회전 각을 + 45도 회전하는 회전 변환을 적용하면 한 번만 회전하는 것을 볼 수 있습니다. 같은 변환을 다시 적용해도보기가 + 45도 회전하지 않습니다. 뷰가 이미 +45도 회전했기 때문에 동일한 변형의 모든 후속 응용 프로그램이 눈에 띄는 효과를 내지 못합니다.

변환을 누적시키기 위해서는 새로운 변환을 기존의 변환을 대체하는 대신 적용하십시오. 이후의 각 회전에 대해 이전에 언급 한 바와 같이 그래서 당신은 사용 : 새가 변환 기존의 변환을 추가

shape.transform = CGAffineTransformRotate(shape.transform, M_PI); 

합니다. 이 방식으로 +45도 변환을 추가하면 뷰가 적용될 때마다 +45도 회전합니다.

+0

안녕하세요 TechZen, 예, 회전을 위해 그런 식으로 작동합니다. 하지만 여기 내 문제는 회전과 관련이 없습니다. UIImageview (내 원본 게시물 에이 사용하고 코드를 참조하십시오) 플립 (미러 이미지) 노력하고 있어요 거기에 영구 변환 할 수있는 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다. 감사합니다. –

+0

"두 번째로 반전하려고 할 때"정확한 두 번째 변형을 적용한다는 의미인가요? 그렇다면 내 원래 조언은 여전히 ​​유효합니다. 그렇지 않다면, 나는 당신이하려는 것을 오해했습니다. – TechZen

1

나는 당신과 같은 문제가있어 해결책을 찾았습니다! 내가 애니메이션을 가지고 있기 때문에 UIImageView을 회전시키고 싶습니다.나는이 방법을 사용하여 이미지를 저장하려면 :

void CGContextConcatCTM(CGContextRef c, CGAffineTransform transform) 

이 PARAM을 변환하면 이미지와 동일합니다 당신이 이미지 뷰에했던 당신의 UIImageView 그래서 아무것도 변환입니다! 그리고 나는 UIImage이라는 카테고리 메소드를 작성했습니다.

-(UIImage *)imageRotateByTransform:(CGAffineTransform)transform{ 
// calculate the size of the rotated view's containing box for our drawing space 
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)]; 
rotatedViewBox.transform = transform; 
CGSize rotatedSize = rotatedViewBox.frame.size; 
[rotatedViewBox release]; 

// Create the bitmap context 
UIGraphicsBeginImageContext(rotatedSize); 
CGContextRef bitmap = UIGraphicsGetCurrentContext(); 

// Move the origin to the middle of the image so we will rotate and scale around the center. 
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 

//Rotate the image context using tranform 
CGContextConcatCTM(bitmap, transform); 
// Now, draw the rotated/scaled image into the context 
CGContextScaleCTM(bitmap, 1.0, -1.0); 
CGContextDrawImage(bitmap, CGRectMake(-self.size.width/2, -self.size.height/2, self.size.width, self.size.height), [self CGImage]); 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 

} 

희망이 도움이 될 것입니다.

관련 문제