Анимация UIIMageView Alpha на представлении загрузилась

Я пытаюсь оживить фоновое изображение моего HomeController,

Я хотел бы добавить изображение, так как я надеялся оживить его alpha имущество.

Здесь я нашел много ответов, однако многие из них кажутся устаревшими (obj c, iOS 3/4/5 и т. Д.) И, следуя рекомендованному подходу, я все еще не могу заставить эту анимацию работать.

Может кто-нибудь сказать, пожалуйста, что не так с моим кодом?

Я хотел бы оживить backgroundImage, Я поместил свой код анимации в конце моего setupView метод.

Он не "затухает", как хотелось бы, по сути, альфа прыгает прямо на 0,7

import UIKit

class HomeController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setupView()
    }

    private let backgroundImage: UIImageView = {
        let image = UIImageView()
        image.image = #imageLiteral(resourceName: "foggy").withRenderingMode(.alwaysOriginal)
        image.contentMode = .scaleToFill
       image.alpha = 0
        image.isOpaque = false

        return image
    }()

    private let currentLocation: UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("Southampton, UK", for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 24)
        button.contentMode = .center
        button.setTitleColor(.black, for: .normal)
        button.addTarget(self, action: #selector(onPressLocation), for: .touchUpInside)

        return button
    }()

    private let currentTemp: UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("37°C", for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 54, weight: .thin)
        button.contentMode = .center
        button.setTitleColor(.white, for: .normal)
        button.addTarget(self, action: #selector(onPressTemp), for: .touchUpInside)

        return button
    }()

}

extension HomeController {

    @objc fileprivate func onPressLocation() -> Void {
        print("Location pressed.")
    }

    @objc fileprivate func onPressTemp() -> Void {
        self.currentTemp.setTitle("98°F", for: .normal)
    }

    fileprivate func setupView() -> Void {

        view.backgroundColor = .white

        // MARK: Background Image
        view.addSubview(backgroundImage)
        backgroundImage.anchor(
            top: view.safeAreaLayoutGuide.topAnchor,
            left: view.safeAreaLayoutGuide.leftAnchor,
            bottom: view.safeAreaLayoutGuide.bottomAnchor,
            right: view.safeAreaLayoutGuide.rightAnchor,
            paddingTop: 0,
            paddingLeft: 0,
            paddingBottom: 0,
            paddingRight: 0,
            width: 0,
            height: 0
        )

        // MARK: Current Location
        view.addSubview(currentLocation)
        currentLocation.anchor(
            top: view.safeAreaLayoutGuide.topAnchor,
            left: view.safeAreaLayoutGuide.leftAnchor,
            right: view.safeAreaLayoutGuide.rightAnchor,
            paddingTop: 50,
            paddingLeft: 0,
            paddingBottom: 0,
            paddingRight: 0,
            width: 0,
            height: 26,
            centerX: view.centerXAnchor
        )

        // MARK: Temp Button
        view.addSubview(currentTemp)
        currentTemp.anchor(
            top: currentLocation.bottomAnchor,
            paddingTop: 10,
            paddingLeft: 0,
            paddingBottom: 0,
            paddingRight: 0,
            width: 200,
            height: 70,
            centerX: view.centerXAnchor
        )

        // MARK: Animations
        UIView.animate(withDuration: 6, delay: 3, options: .curveEaseInOut, animations: {
            self.backgroundImage.alpha = 0.7
        }, completion: nil)

    }
}

2 ответа

Решение

IBOutlets не становится видимым, когда viewDidLoad называется так называть setupView метод в viewDidAppear который вызывается после того, как ваш вид появился на экране.

Надеюсь это поможет.

Вы можете поместить свой код в метод жизненного цикла представления viewDidAppear для любой анимационной работы, поскольку метод viewDidAppear уведомляет контроллер представления о том, что его представление было добавлено в иерархию представлений. Используйте приведенный ниже код для вашего решения.

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated: animated)
    //Call method like this 
      setupView()
   }
Другие вопросы по тегам