Как заставить растворяться анимацию при смене представлений на iphone? - PullRequest
11 голосов
/ 01 марта 2012

Как заставить раствориться анимацию при смене представлений в iphone?

Эффект растворения: один вид меняет другой без какого-либо движения.

Большое спасибо за помощь!

Ответы [ 4 ]

19 голосов
/ 01 марта 2012

Анимация, которую вы ищете:

[UIView animateWithDuration: 1.0
                 animations:^{
                     view1.alpha = 0.0;
                     view2.alpha = 1.0;
                 }];

Более полное решение с использованием этой анимации может быть:

- (void) replaceView: (UIView *) currentView withView: (UIView *) newView
{
    newView.alpha = 0.0;
    [self.view addSubview: newView];

    [UIView animateWithDuration: 1.0
                     animations:^{
                         currentView.alpha = 0.0;
                         newView.alpha = 1.0;
                     } 
                     completion:^(BOOL finished) {
                         [currentView removeFromSuperview];
                     }];
}
18 голосов
/ 03 марта 2012

Вы также можете использовать UIViewAnimationOptionTransitionCrossDissolve в ios5 и позже ...

[UIView transitionFromView:currentView
                    toView:nextView
                  duration:2
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                completion:^(BOOL finished) {
                    [currentView removeFromSuperview];
                    }];
1 голос
/ 26 ноября 2016

UIView имеет метод с именем transition(from:to:duration:options:completion:), который имеет следующее объявление:

class func transition(from fromView: UIView, to toView: UIView, duration: TimeInterval, options: UIViewAnimationOptions = [], completion: ((Bool) -> Void)? = nil)

Создает анимацию перехода между указанными видами с использованием заданных параметров.


Среди множества UIViewAnimationOptions параметров, которые вы можете передать transition(from:to:duration:options:completion:), есть transitionCrossDissolve.

transitionCrossDissolve имеет следующую декларацию:

static var transitionCrossDissolve: UIViewAnimationOptions { get }

Переход, который растворяется от одного взгляда к другому.


Следующий код Swift 3 Playground показывает, как переключаться между двумя UIViews с переходом с перекрестным растворением, используя transition(from:to:duration:options:completion:) и transitionCrossDissolve:

import UIKit
import PlaygroundSupport

class ViewController: UIViewController {

    let firstView: UIView = {
        let view = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
        view.backgroundColor = .red
        return view
    }()
    let secondView: UIView = {
        let view = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
        view.backgroundColor = .blue
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        view.addSubview(firstView)

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggle(_:)))
        view.addGestureRecognizer(tapGesture)
    }

    func toggle(_ sender: UITapGestureRecognizer) {
        let presentedView = view.subviews.first === firstView ? firstView : secondView
        let presentingView = view.subviews.first !== firstView ? firstView : secondView        
        UIView.transition(from: presentedView, to: presentingView, duration: 1, options: [.transitionCrossDissolve], completion: nil)
    }

}

let controller = ViewController()
PlaygroundPage.current.liveView = controller
0 голосов
/ 01 марта 2012
[UIView beginAnimations: @"cross dissolve" context: NULL];
[UIView setAnimationDuration: 1.0f];
self.firstView.alpha = 0.0f;
self.secondView.alpha = 1.0f;
[UIView commitAnimations];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...