2014-09-08 1 views
1

에 D-패드 엑스 코드 5를 구현하는 방법. 나는 4 UIButtons의 스타일로 그것을하고 있는데, 하나를 누르면 다른 이미지를 위, 아래, 왼쪽 또는 오른쪽으로 움직인다. Quartzcore와 CAAnimation을 사용해 보았지만 제한된 코드 만 알고 있습니다.나는 나의 새로운 미로 게임을위한 D-패드를 구현하기 위해 여러 번 시도했지만 문제가 그렇게를 데 아이 패드

나는 메소드와 버튼을 선언했지만 작동중인 코드는 작성할 수 없습니다.

내가 뭐하고 있었 :

-(IBAction)Up:(id)sender{ 

CGPoint origin1 = self.Player.center; 
CGPoint target1 = CGPointMake(self.Player.center.x, self.Player.center.y-124); 
CABasicAnimation *bounce1 = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
bounce1.duration = 0.1; 
bounce1.fromValue = [NSNumber numberWithInt:origin1.y]; 
bounce1.toValue = [NSNumber numberWithInt:target1.y]; 
[self.Player.layer addAnimation:bounce1 forKey:@"position"]; 

} 

을 귀신 아래로 이동하지만, 즉시 백업 BOPS. 나는 몇 시간 동안 난처한 상황에 처했을 때 얼굴을 찡 그릴 지 모르지만 내 멍청함을 이해하십시오.

답변

1

코어 애니메이션에는 모델 레이어와 프리젠 테이션 레이어 중 하나의 레이어 계층 구조가 있습니다. 프레젠테이션 레이어는 사용자가 보는 것입니다. 모델 레이어는 코드에서 종종 상호 작용하는 것입니다. 이 분리는 암시 적 애니메이션을 만들 수 있으므로 유용합니다. 레이어의 위치를 ​​설정하면 새 지점에 애니메이션이 적용됩니다. 그러나 position에 값을 할당하면 애니메이션이 진행중인 경우에도 즉시 읽은 값이됩니다.

addAnimation:forKey:을 사용하면 프리젠 테이션에 영향을 미칩니다. 모델. 따라서 애니메이션을하는 동안 Player 레이어가 움직이는 것을 볼 수 있지만 그 레이어는 "실제로"남아 있습니다. 애니메이션이 끝나 자마자 레이어에서 제거되므로 프리젠 테이션이 모델과 다시 일치합니다. 원래 위치에서 볼 수 있습니다. 당신이 모델의 위치뿐만 아니라 변경하려면

, 별도로 변경해야합니다 당신은 애니메이션을 추가 한 후 모델을 바로 업데이트 할 수 있습니다

self.player.layer.position = CGPointMake(self.player.layer.position.x, target1.y); 

(당신은 애니메이션 후 변화를 볼 수 있습니다 완료)하거나 완료 블록을 사용하여 애니메이션이 끝날 때 일정을 예약하십시오. 방금 특히 UIView의 주요 계층에 대해, 같은 특정 변화를 애니메이션을 적용 할 경우 There are subtleties to consider for either approach.

종종하지만, 그것은 UIView에 암시 적 애니메이션 API를 사용하여 간단 :

[UIView animateWithDuration:0.1 animations: ^{ 
    self.player.center = CGPointMake(self.player.center.x, target1.y); 
}]; 

이 의지 모델 값을 업데이트하고 현재 위치에서 목표 위치로 이동하기위한 애니메이션을 만들고 실행합니다.


은 BTW : 유일한 변수/특성/메소드 이름에 클래스 이름 또는 다른 종류의 이름, 소문자의 초기 캡을 사용 : 그것은 코코아 코드 스타일의 규칙을 따라야하는 데 도움이됩니다.