Ios 在多个UIView上添加Facebook Shimmer
我正在尝试在UICollectionViewCell上添加Facebook微光,它有多个UIView 对于一个UIView,它可以使用以下代码正常工作:Ios 在多个UIView上添加Facebook Shimmer,ios,swift,uicollectionviewcell,loading,Ios,Swift,Uicollectionviewcell,Loading,我正在尝试在UICollectionViewCell上添加Facebook微光,它有多个UIView 对于一个UIView,它可以使用以下代码正常工作: let shimmeringView = FBShimmeringView(frame: imageView.frame) shimmeringView.contentView = imageView backgroundView.addSubview(shimmeringView) shimmeringView.isShimmering =
let shimmeringView = FBShimmeringView(frame: imageView.frame)
shimmeringView.contentView = imageView
backgroundView.addSubview(shimmeringView)
shimmeringView.isShimmering = true
其中,backgroundView
是我拥有所有子视图的视图,如imageView
、labelView
和其他
当我尝试添加多个视图时,第一个视图得到了正确的帧,但其他视图的宽度变为零。我正在collectionView(\uu:cellForItemAt:)
中添加此代码
有谁能告诉我,对于多个
UIView
s来说,这是实现Facebook Shimmer的正确方法,还是我做错了什么?我相信有很多方法可以实现FBShimmeringView
,这是一个偏好问题。所以在我的情况下,我更喜欢最简单的方法(根据我的说法)
我在我的tableViewCell
中所做的,当然有多个视图,比如imageView
和标签
,就像你的一样,就是我有多个ui视图
灰色,放在我单元格中每个视图的顶部
然后我的单元格中只添加了一个FBShimmeringView
的实例
下面是关于我如何使用FBShimmeringView
的更多细节
*请注意,我使用SnapKit
以编程方式布局视图
isLoading
的属性,类似于这样,它决定了应该显示还是现在显示灰色视图。如果显示,当然要启用“微光”:
public var serviceIsLoading: Bool = false {
didSet {
_ = self.view_Placeholders.map { $0.isHidden = !self.serviceIsLoading }
self.view_Shimmering.isHidden = !self.serviceIsLoading
self.view_Shimmering.isShimmering = self.serviceIsLoading
}
}
// Place the FBShimmeringView
// Try to add a dummy view
let dummyView = UIView()
dummyView.backgroundColor = .white
self.addSubview(dummyView)
dummyView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
self.view_Shimmering.contentView = dummyView
self.addSubview(self.view_Shimmering)
self.view_Shimmering.snp.makeConstraints { (make) in
make.height.width.equalToSuperview()
make.center.equalToSuperview()
}
// Place the FBShimmeringView
// Try to add a dummy view
let dummyView = UIView()
dummyView.backgroundColor = .white
self.addSubview(dummyView)
dummyView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
self.view_Shimmering.contentView = dummyView
表视图中禁用交互
这看起来很酷,当它闪烁,只是一个shimerring的看法
希望有帮助 下面的分机工作正常
extension UIView {
func startShimmeringViewAnimation() {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
let gradientColorOne = UIColor(white: 0.90, alpha: 1.0).cgColor
let gradientColorTwo = UIColor(white: 0.95, alpha: 1.0).cgColor
gradientLayer.colors = [gradientColorOne, gradientColorTwo, gradientColorOne]
gradientLayer.locations = [0.0, 0.5, 1.0]
self.layer.addSublayer(gradientLayer)
let animation = CABasicAnimation(keyPath: "locations")
animation.fromValue = [-1.0, -0.5, 0.0]
animation.toValue = [1.0, 1.5, 2.0]
animation.repeatCount = .infinity
animation.duration = 1.25
gradientLayer.add(animation, forKey: animation.keyPath)
}
}
在UITableViewCell类中,我们需要为每个视图添加微光
class UAShimmerCell: UITableViewCell {
@IBOutlet weak var thumbNailView: UIView!
@IBOutlet weak var label1View: UIView!
@IBOutlet weak var label2View: UIView!
override func awakeFromNib() {
super.awakeFromNib()
thumbNailView.startShimmeringViewAnimation()
label1View.startShimmeringViewAnimation()
label2View.startShimmeringViewAnimation()
}
}