iphone - example - html meta apple icon




UIView 플립 애니메이션 (4)

내 게임에서 내 기본 UIView에 호스팅 된 작은 UIViews의 표가 있습니다. 무작위로 상자가 다른 색으로 바뀌므로이 시점에서 사용자는이를 터치하여 점수를 매길 수 있습니다. 그들이 상자에 닿았을 때 나는 Xcode가 기본적으로 제공하는 모달 수평 플립 세그먼트와 비슷한 어떤 종류의 애니메이션을 이상적으로 보여주고 싶습니다. 실제로 다른 UIView로 전환하지 않고이 애니메이션을 어떻게 할 수 있습니까?


Swift 3.0에 대한 다음 코드를 사용하여이 작업을 수행 할 수 있습니다.

    UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseInOut, animations: { 
        self.view.transform = CGAffineTransform(scaleX: 1, y: -1)
    }, completion: nil)

이 작업은 기본 스레드에서 발생하므로 실행 중에 앱이 차단됩니다.

완료 핸들러가 필요한 경우 다음과 같은 몇 가지 옵션이 있습니다.


다음과 같이 뷰 변형을 시도하고 애니메이션을 적용 할 수 있습니다 (수직 반전의 경우).

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:nil];

또는 더 나은 제어를 위해 iOS-Flip-Transform 살펴볼 수 있습니다.

편집하다:

그림자 일을 위해서 다음과 같이 해보십시오.

    view.layer.shadowColor = [UIColor blackColor].CGColor;
    view.layer.shadowOpacity = 0.75;
    view.layer.shadowRadius = 15.0;
    view.layer.shadowOffset = (CGSize){0.0,20.0};

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:^(BOOL b) {
    view.layer.shadowColor = [UIColor clearColor].CGColor;
    view.layer.shadowOpacity = 0.0;
    view.layer.shadowRadius = 0.0;
    view.layer.shadowOffset = (CGSize){0.0, 0.0};
                 }];

나는 이것이 당신을 위해 잘 작동하기를 바랍니다. 원하는대로 그림자 설정을 변경할 수 있습니다. QuartzCore / QuartzCore.h를 임포트하는 것을 잊지 마십시오.


이것은 Ilker Baltaci의 대답 에 기초하여 ( 스위프트 3에서 ) 끝났습니다.

@IBAction func flipViews() {

    // declare variables for transition
    let duration = 0.5
    var animationOptions: UIViewAnimationOptions
    var animations: () -> Void
    var completion: ((Bool) -> Void)?

    if view2.isHidden {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromTop]
        animations = {
            self.view2.isHidden = false
            self.view1.isHidden = true
        }
        completion = { success in
            if success {
                self.updateSomeContentOfView2()
            }
        }
    } else {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromBottom]
        animations = {
            self.view2.isHidden = true
            self.view1.isHidden = false
        }
    }

    UIView.transition(with: containerView,
                      duration: duration,
                      options: animationOptions,
                      animations: animations,
                      completion: completion)
}

containerView , view1view2 내 View 계층 (사용자 정의 ViewController 클래스의 모든 IBOutlets )은 다음과 같습니다.

  • containerView
    • view1
    • view2

UIView 는 다음과 같은 메서드를 제공합니다.

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

옵션에는 UIViewAnimationOptionTransitionFlipFromLeft 및 ...이 포함됩니다.







uikit