簡體   English   中英

如何在 iOS swift 中將 subView 添加到 anotherSubView 並居中對齊。

[英]How to add subView to anotherSubView with center alignment in iOS swift.

我正在使用 lottie 庫來制作動畫。 我將 lottieFile 作為 subView 加載到 anotherSubView 但它沒有在中心對齊。 我嘗試使用中心屬性如下:

@IBOutlet weak var viewOn: UIView!

let animationView = LOTAnimationView(name: "restless_gift_ii") {
animationView.loopAnimation = true
animationView.contentMode = .scaleToFill
animationView.animationSpeed = 1
animationView.backgroundColor = UIColor.black
animationView.frame.size = viewOn.frame.size
animationView.center.x = viewOn.center.x
animationView.center.y = viewOn.center.y
viewOn.addSubview(animationView) }

結果未對齊

您可以以編程方式使用自動布局將您的動畫視圖居中對齊到它的超級視圖中。

在這里,我添加了兩種方法來添加animationView居中對齊,也添加了注釋以供理解。

if let animationView = LOTAnimationView(name: "4_bar_loop") {

        animationView.loopAnimation = true
        animationView.contentMode = .scaleToFill
        animationView.animationSpeed = 1
        animationView.backgroundColor = UIColor.black

        self.viewOn.addSubview(animationView)

        animationView.translatesAutoresizingMaskIntoConstraints = false

        // Apply these constrains if you want animation size should be same as super view.
        self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .leading, relatedBy: .equal, toItem: self.viewOn, attribute: .leading, multiplier: 1.0, constant: 1))
        self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .trailing, relatedBy: .equal, toItem: self.viewOn, attribute: .trailing, multiplier: 1.0, constant: 1))
        self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .top, relatedBy: .equal, toItem: self.viewOn, attribute:.top, multiplier: 1.0, constant: 1))
        self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .bottom, relatedBy: .equal, toItem: self.viewOn, attribute: .bottom, multiplier: 1.0, constant: 1))


        // Apply these constraint if you want animationView with fixed height and width and center of super view.
//            self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .centerX, relatedBy: .equal, toItem: self.viewOn, attribute: .centerX, multiplier: 1.0, constant: 1))
//            self.viewOn.addConstraint(NSLayoutConstraint(item: animationView, attribute: .centerY, relatedBy: .equal, toItem: self.viewOn, attribute: .centerY, multiplier: 1.0, constant: 1))
//            animationView.addConstraint(NSLayoutConstraint(item: animationView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 100))
//            animationView.addConstraint(NSLayoutConstraint(item: animationView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 100))
        }

在此處輸入圖片說明

你可以像下面的代碼一樣編程,希望這對你有幫助

import UIKit

class ViewController: UIViewController {

    let firstView:UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = UIColor.blue
        return view
    }()

    let secondView:UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = UIColor.orange
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setupViews()
    }

    func setupViews(){

        view.addSubview(firstView)
        firstView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: 0).isActive = true
        firstView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
        firstView.widthAnchor.constraint(equalToConstant: 100).isActive = true
        firstView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        // second view
        firstView.addSubview(secondView)
        secondView.centerYAnchor.constraint(equalTo: firstView.centerYAnchor, constant: 0).isActive = true
        secondView.centerXAnchor.constraint(equalTo: firstView.centerXAnchor, constant: 0).isActive = true
        secondView.widthAnchor.constraint(equalToConstant: 50).isActive = true
        secondView.heightAnchor.constraint(equalToConstant: 50).isActive = true

    }

}
@IBOutlet weak var viewOn: UIView!

let animationView = LOTAnimationView(name: "restless_gift_ii")
{
    animationView.loopAnimation = true
    animationView.contentMode = .scaleToFill
    animationView.animationSpeed = 1
    animationView.backgroundColor = UIColor.black
    animationView.frame = viewOn.frame
    viewOn.addSubview(animationView)
}

你可以試試,希望沒問題

我在 Lottie 動畫的對齊和縮放方面遇到了幾個問題。 它們會以模擬器為中心出現,但不會出現在設備上。 經過幾個小時的調試后,我發現布局問題正在發生,因為我在viewDidLoad()上設置了動畫。 當我將代碼移動到viewDidAppear(_ animated: Bool)一切都像魅力一樣。 我希望這可以幫助別人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM