2013-10-23 2 views
0

이 코드의 이미지는 최종 크기에 도달 할 때까지 가운데에서 커지고 멈 춥니 다. 내가 필요한 것은 그것이 성장하는 동안 이미지를 하단 중앙으로 이동시키는 것입니다. 감사합니다.성장하면서 이미지를 이동하는 방법은 무엇입니까?

- (IBAction)expand:(id)sender { 


    grow.transform = CGAffineTransformMakeScale(1,1); 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:5.7]; 
    grow.transform = CGAffineTransformMakeScale(5, 5); 

     [UIView setAnimationRepeatAutoreverses:YES]; 
    self.view.transform = CGAffineTransformIdentity; 

     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

     grow.alpha = 1.0; 


     [UIView commitAnimations]; 


    } 

답변

0

그냥 답을 찾았는데 저에게 좋습니다. 첫 번째 코드 다음에이 코드를 추가하고 원하는 효과를 얻었습니다. 다음은 코드입니다 :

grow.center = CGPointMake (150, 650);

[UIView animateWithDuration:5.0 
       animations:^{grow.center= CGPointMake(160, 244);}]; 

올바르게 작동하려면 Autolayout을 해제해야했습니다.

다시 답변 해 주셔서 감사합니다.

0

몇 가지 방법으로 해결할 수 있습니다. 사용중인 애니메이션 코드 기술은 iOS4에서 대체되었으며 CGAffineTransform의 사용은 (내 취향에 대해) 정확히 이상적이지 않습니다.

- (IBAction)expand:(id)sender { 
    grow.transform = CGAffineTransformMakeScale(1,1); 
    CGFloat scale = 5.0; 
    CGFloat moveDistance = ([[UIScreen mainScreen] bounds].size.height - (grow.frame.origin.y*scale)) - grow.frame.origin.y; 
    CGAffineTransform transformation = CGAffineTransformMakeScale(scale, scale); 
    transformation = CGAffineTransformTranslate(transformation, 0, moveDistance); 
    [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:5.7]; 
     grow.transform = transformation; 
     [UIView setAnimationRepeatAutoreverses:YES]; 
     self.view.transform = CGAffineTransformIdentity; 
     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
     grow.alpha = 1.0; 
    [UIView commitAnimations]; 
} 

내가 추천 :이 방법을 사용하기를 원한다면

그럼에도 불구하고,이 (:이 테스트를하지 않은, 그것은 추측 다소의 주)와 비슷한 뭔가를 할 수 비록 블록 기반의 애니메이션 메소드를 사용하고 있지만 훨씬 더 간단하고 읽기 쉽습니다. 또한, 확대를 위해 CGAffineTransform을 사용하면 문제가 발생할 수 있습니다 (예를 들어, UILabel의 프레임 크기를 늘리면 단순히 텍스트의 위치가 변경됩니다 .CGAffineTransform을 사용하면 텍스트가 확대되어 픽셀 화됩니다). 당신은 이것과 비슷한 것을 할 수 있습니다 :

CGFloat scale = 5.0; 
CGRect originalFrame = grow.frame; 
CGRect targetFrame = CGRectMake(
    originalFrame.origin.x-(originalFrame.size.width*(scale/2.0)), 
    [[UIScreen mainScreen] bounds].size.height - (originalFrame.size.height*scale), 
    originalFrame.size.width*scale, 
    originalFrame.size.height*scale); 
[UIView animateWithDuration:5.7 delay:0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{ 
    [UIView setAnimationRepeatCount:1] 
    grow.frame = targetFrame; 
    grow.alpha = 1.0; 
} completion:nil]; 
+0

먼저 내 질문에 답변 해 주셔서 감사합니다. 나는 그런 빠른 대답을 기대하지도 않았다. 글쎄, 내가 코드의 첫 번째 라인을 시도했지만 두 가지 오류가 있어요 : 1- 함수 호출에 너무 많은 인수, 예상 2, 3이 있습니다. 2 - 함수 호출에 너무 적은 인수, 예상 3, 2가 있습니다. 이상한 애니메이션이 자라면서 축소되고 멀리서 움직입니다. – user2828182

+0

가장 최근의 코드인지 확인하십시오. 몇 번 편집했는데 편집 한 실수 중 하나가 잘못된 메서드에 매개 변수를 전달하는 것입니다 ('CGAffineTransformMakeScale'에는 2 개의 매개 변수가 있어야하고'CGAffineTransformTranslate'에는 3이 있어야합니다.). 두 번째 코드 블록은 자동 반향 (yes, grow, then shrink)을 포함하여 첫 번째 코드 블록과 거의 동일하게 작동해야합니다. 당신은 또한 자동 반전 운동을 원했습니까? – Xono

+0

이제 첫 번째 이미지가 작동하지만 이미지가 완전히 사라질 때까지 아래쪽으로 계속 이동합니다. 내가 정확히 원하는 것은 상반부가 여전히 보이고 다른 반쪽이 사라지고 이미지가 가장 큰 크기에 도달하면 이미지가 멈추는 것입니다. – user2828182

관련 문제