2011-03-11 7 views
0

UIImageView에 간단한 번역 애니메이션을 만들려고합니다. 처음에는 [UIView animation] 클래스를 사용하고 싶었지만 애니메이션 중에 이벤트 (예 : 다른 객체와의 단순한 충돌)를 충분히 제어 할 수 없다는 것을 깨달았습니다.코코아 터치 - 타이머로 애니메이션하기

이 :

나는 다음 애니메이션이 완료되거나 일이 일어날 때까지 (충돌 또는 객체 자체가 사라지는 참조) 때까지 잠을 반복 한 후, 센터 내있는 UIImageView의 좌표 수정 것 간단한 스레드를 사용하는 방법에 대한 생각 내가 쓴 코드입니다 :

-(void)animateImageView:(UIImageView*)view{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    float totalTime=6.0f; 
    float elapsedTime=0; 
     while(totalTime<=elapsedTime){ 
         if(conditions){...}//here are my checks 
      CGPoint newCenter=CGPointMake(view.center.x+10, view.center.y); 
      view.center=newCenter; 
      NSLog(@"%f",view.center.x); 
      elapsedTime+=0.1; 
      [NSThread sleepForTimeInterval:0.1]; 
      } 
    [view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES]; 

    [pool release]; 

}

사실은, 내 이미지가 이동하지 않습니다,하지만 이미지의 중심이 어디 NSLog 명령은 오른쪽 좌표. 아니 아이디어 왜? 아마도 이것이 잘못된 접근입니까?

+0

[view setNeedsDisplay]를 넣으려고 했습니까? 거기에? 일반적으로 프레임을 변경하면보기가 다시 그려 지지만 시도해 볼 가치가 있습니다. – Robin

+0

그 행을 삽입하려고했지만 아무 것도 변경되지 않았습니다. 때로는 내 이미지가 조금 움직이는 것처럼 보입니다. 나는 틀린 것을 이해할 수 없습니다. – Lorenzo

답변

0

모든 UIKit 클래스는 스레드로부터 안전하지 않습니다. 따라서 메인 스레드에서만 작업하십시오 (view.center=newCenter;).

+1

당신 말이 맞습니다. performSelectorOnMainThread를 통해 메인 스레드를 통해 새 센터를 할당했습니다. 이제 작동합니다. 대단히 고마워, 그걸 알아 내려면 나이가 들었을거야. – Lorenzo