iPhone - 버튼을 눌렀을 때 애니메이션을 적용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1029805

  •  06-07-2019
  •  | 
  •  

문제

iPhone 버튼을 클릭할 때 사용자 정의 애니메이션을 만드는 방법이 있습니까?App Store 버튼과 같은 기능을 원합니다. 가격이 표시되고, 클릭하면 색상이 바뀌고 텍스트가 지금 구매로 변경되고, 다시 클릭하면 구매가 완료됩니다.

UIViewAnimationTransition에는 전체 기능을 제공하지 않는 몇 가지 값만 포함되어 있습니다.애니메이션을 사용하면 이와 같은 작업을 수행할 수 있습니까?

- (IBAction) changeButtonDisplay:(id)sender {

  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.8];
  [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:purchaseButton cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility

  [purchaseButton setTitle:@"Buy Now" forState:UIControlStateNormal];
  [purchaseButton setBackgroundColor:[UIColor greenColor]];
  [purchaseButton addTarget:self action:@selector(purchaseItems:) forControlEvents:UIControlEventTouchUpInside];

  [UIView commitAnimations];

}

이 코드는 작동하며 적절한 전환을 표시하고 두 번째 클릭이 적절한 작업을 수행하도록 허용하지만 제목과 색상은 부드러운 애니메이션이 아닌 즉시 변경됩니다.이러한 애니메이션을 쉽게 할 수 있습니까? UIButton 하위 클래스를 만들고 애니메이션을 "수동으로" 수행해야 합니까?그렇다면 어떤 방법을 재정의해야 합니까?

도움이 되었습니까?

해결책

버튼의 제목과 대상 등을 변경하는 대신 각 작업을 수행하고 다르게 보이는 두 개의 별도 버튼을 사용하세요.그런 다음 버튼을 누르면 슈퍼 뷰에서 현재 버튼을 제거하고 해당 위치에 새 버튼을 뷰에 추가하는 메서드를 호출합니다.이를 UIView 애니메이션 블록으로 마무리하면 애니메이션을 얻을 수 있습니다.

또한 이 기능이 작동하려면 버튼의 슈퍼뷰에서 애니메이션 전환을 설정해야 합니다.따라서 '컨테이너 뷰'를 그대로 갖고 그 하위 뷰로 버튼을 추가하는 것이 편리할 수 있습니다.

의사 코드는 다음과 같습니다.

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:buttonConteinerView cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility

[purchaseButton retain];
[purchaseButton removeFromSuperView];

[buttonContainerView addSubview:secondPurchaseButton];

[UIView commitAnimations];

다른 팁

표준 uiview는 당신이 원하는 것을 할 것입니다. Uiview의 BackgroundColor는 애니메이션 가능한 속성입니다.

Uiview를 서브 클래싱하거나 Uibutton을 서브 클래스하고 하위 뷰를 추가하여 자신만의 "버튼"을 만들 것입니다. (참고 : Uibittons는 2.2에서 이것에 대해 고통 스러웠으며 3.0에서 확실하지 않습니다).

각 텍스트 상태마다 uilabel이 필요합니다.

UILabel *textForStateOne;
UILabel *textForStateTwo;

부모보기의 배경색을 변경할 수 있습니다.

그러면 새 버튼 클래스에서 메소드를 만듭니다.

 -(void)toggleState{

myState = !myState;

  if(myState){

      [UIView beginAnimations:nil context:NULL];
      [UIView setAnimationDuration:0.8];

      [textForStateOne setAlpha:1.0]
      [textForStateTwo setAlpha:0.0]

      [self setBackgroundColor:[UIColor greenColor]];

      [UIView commitAnimations];


  } else{

       //do the opposite here

  }




}
UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top