ndduong
ndduong

Reputation: 439

How do you add Facebook shimmering to images and UIViews?

I'm trying out Facebook shimmering library and I was able to add shimmering to text label using this code.

    self.shimmeringView = FBShimmeringView(frame: CGRectMake(0, 0, 200, (self.navigationController?.navigationBar.bounds.height)!))
    self.shimmeringView.contentView = navLabel
    self.navigationItem.titleView = self.shimmeringView
    self.shimmeringView.shimmering = true

However, I am unable to make an image or an UIImage shimmer. Is this even possible? Thanks!

Upvotes: 1

Views: 5982

Answers (4)

Ciprian Cojan
Ciprian Cojan

Reputation: 23

You can use constraints as well, without initializing the shimmer view every time when the view layouts the subviews:

let shimmer = FBShimmeringView(frame: .zero)
view.addSubview(shimmer)
shimmer.translatesAutoresizingMaskIntoConstraints = false
let leadingConstraint = NSLayoutConstraint(item: shimmer, attribute: .leading, relatedBy: .equal, toItem: navLabel, attribute: .leading, multiplier: 1, constant: 0)
let trailingConstraint = NSLayoutConstraint(item: shimmer, attribute: .trailing, relatedBy: .equal, toItem: navLabel, attribute: .trailing, multiplier: 1, constant: 0)
let topConstraint = NSLayoutConstraint(item: shimmer, attribute: .top, relatedBy: .equal, toItem: navLabel, attribute: .top, multiplier: 1, constant: 0)
let bottomConstraint = NSLayoutConstraint(item: shimmer, attribute: .bottom, relatedBy: .equal, toItem: navLabel, attribute: .bottom, multiplier: 1, constant: 0)
view.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])

Upvotes: 1

Shubhank
Shubhank

Reputation: 21805

What you are doing for shimmering the UIImageView is wrong.

  1. You did not add shimmer to the view as a subview.
  2. You did not set the UIImageView as the contentView for the shimmer.

Update your code with something like that:

@IBOutlet var imageView: UIImageView!

var shimmer: FBShimmeringView!

override func viewDidLoad() {
    shimmer = FBShimmeringView(frame: self.imageView.frame)
    shimmer.contentView = imageView
    self.view.addSubview(shimmer)
    shimmer.isShimmering = true
}

Upvotes: 6

Nagendra Rao
Nagendra Rao

Reputation: 7152

Swift 3 with Shimmer (1.0.2):

var imageView: UIImageView!

var shimmer: FBShimmeringView!

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    shimmer = FBShimmeringView(frame: self.imageView.frame)
    shimmer.contentView = imageView
    self.view.addSubview(shimmer)
    shimmer.isShimmering = true
}

Upvotes: 1

nja
nja

Reputation: 278

I had a problem with @Shubhank answer, even though most of the answer is fine.

Using viewDidLoad instead of viewDidLayoutSubviews for shimmer frame didn't give me results that I wanted.

So I updated the code, and everything works fine.

@IBOutlet var imageView: UIImageView!

var shimmer: FBShimmeringView!

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        shimmer = FBShimmeringView(frame: self.imageView.frame)
        shimmer.contentView = imageView
        self.view.addSubView(shimmer)
        shimmer.shimmering = true
}

Upvotes: 0

Related Questions