2012-12-10 2 views
1

작은 도청 게임을 만들려고합니다. 사각형의 격자가 있고 다른 순서로 탭해야합니다. 때로는이 사각형들이 서로 장소를 바꿀 것입니다.UIButton을 두 점 사이로 이동하는 올바른 방법은 무엇입니까?

각 사각형의 위치를 ​​배열에 넣어야한다고 생각합니다. 그런 다음 이동할 때 현재 위치에서 배열에서 무작위로 선택된 위치로 이동 한 다음 배열의 해당 위치를 삭제하여 같은 위치에 여러 개의 단추가 표시되지 않게합니다.

불행히도 UIButtons를 이동시킬 수는 없지만 두 위치 사이를 보간하는 것은 말할 것도 없습니다.

현재이 버튼 이동합니다 :

-(IBAction)button:(id)sender 
{ 
    button.center = CGPointMake(200, 200); 
} 

을하지만 나는 그런 일을하고 싶지 않아, 내가 이런 식으로 뭔가를 작업 할 그것은 작동하지 않습니다

if (allButtonsPressed == YES) 
{ 
    button.center = CGPointMake(200, 200); 
} 

그것은 심지어 같은 위치 이동하지 않으면 :

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    button.center = CGPointMake(200, 200); 
} 

명확성의 경우는, 버튼 인터페이스 빌더를 통해 추가 , 그리고 이러한 모든 상황이 다른 일을 할 때 작동하므로, UIButtons가 특정 방식으로 움직이거나 애니메이션 될 필요가 있다고 생각합니까?

답변

12

viewDidLoad는보기가 표시되기 전에 발생하므로 움직이지 않을뿐입니다. viewDidAppear 메서드에 넣을 수 있습니다.

깜박임 대신 위치에 애니메이션을 적용하려는 경우 UIView 애니메이션 블록에서 항목을 래핑 할 수 있습니다.

[UIView animateWithDuration:0.5 animations:^{ 
    button.center = CGPointMake(200.0, 200.0); 
}]; 

인터페이스 빌더를 사용하고 있으므로 버튼을 추적하기 위해 속성을 사용하고 있다고 가정합니다. 이 기능은 설정 버튼을 몇 개만 사용하는 경우에 효과적 일 수 있지만 게임에서 변경 될 것으로 예상되므로 버튼을 추적하기 위해 코드로 이동하거나 최소한 IBOutletCollections를 사용하려고 할 수 있습니다.

스위프트 3.0 이것은 내가 다른 버튼을 누를 때 다시 그것이 어디 스냅 불구하고, 작동하는 것 같군

UIView.animate(withDuration: 0.5) { [weak self] in 
    self?.button.center = CGPoint(x: 200, y: 200) 
} 
+0

. 길잃은 코드가있을 수 있습니다. 그러나 확인하기 만하면 솔루션이 단순히 위치에 애니메이션 효과를 적용합니까? 아니면 위치에 애니메이션을 적용하고이를 새 위치로 설정합니까? –

+0

이 코드는 애니메이션으로 설정됩니다. 따라서 애니메이션의 한가운데서 확인해 보면 거기에 들어가기 전에 새로운 프레임을 얻을 수 있습니다. 그러나 UIViewAnimationOptionAutoReverse를 지정하지 않으면 그대로있을 것입니다. 그래서 당신은 어떤 길잃은 코드가 있다고 의심합니다. –

+0

UIView 문서를 확인하는 경우 완료 블록 및 모든 위치에서 시작하거나 애니메이션 큐에 대기하는 옵션을 포함하여 UIViewAnimation에 대한 많은 옵션이 실제로 있습니다. –

관련 문제