KevinB
KevinB

Reputation: 2484

Swift - Duplicate UIView

I'm currently trying to achieve a Shimmer effect in Swift. To do that I create a gray UIView, and another on top of it with an effect. The problem is that I'm writing the same code twice...

let profileShimmerView = UIView()
profileShimmerView.backgroundColor = whiteClear
profileShimmerView.layer.cornerRadius = 20
profileShimmerView.clipsToBounds = true

let profileView = UIView()
profileView.backgroundColor = grayClear
profileView.layer.cornerRadius = 20
profileView.clipsToBounds = true

self.addSubview(profileView)
self.addSubview(profileShimmerView)

profileShimmerView.translatesAutoresizingMaskIntoConstraints = false
profileShimmerView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 45).isActive = true
profileShimmerView.topAnchor.constraint(equalTo: self.topAnchor, constant: 15).isActive = true
profileShimmerView.widthAnchor.constraint(equalToConstant: 40).isActive = true
profileShimmerView.heightAnchor.constraint(equalToConstant: 40).isActive = true

profileView.translatesAutoresizingMaskIntoConstraints = false
profileView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 45).isActive = true
profileView.topAnchor.constraint(equalTo: self.topAnchor, constant: 15).isActive = true
profileView.widthAnchor.constraint(equalToConstant: 40).isActive = true
profileView.heightAnchor.constraint(equalToConstant: 40).isActive = true

Is there a more simple way to achieve that?

Upvotes: 0

Views: 143

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100533

You can create a function

func shared(color : UIColor)->UIView {

    let v = UIView()
    v.backgroundColor = color
    v.layer.cornerRadius = 20
    v.clipsToBounds = true
    self.addSubview(v)
    v.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([

        v.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 45),
        v.topAnchor.constraint(equalTo: self.topAnchor, constant: 15),
        v.widthAnchor.constraint(equalToConstant: 40),
        v.heightAnchor.constraint(equalToConstant: 40)

    ]) 

   return v
}

Upvotes: 1

Related Questions