我一直试图让这个动画工作几个小时,但无济于事。这是一个快照。所以我有一个价格标签,显示产品的当前价格,这是在自定义集合视图中。调用collectionView:willDisplayCell
后,我会在名为animateDiscountPrice的自定义集合视图单元格上调用以下方法。
我想要实现的动画是将compare_at价格逐个字符添加到当前价格标签的末尾。我尝试设置REPEAT选项以及重复计数,但动画块只被调用一次,然后立即调用完成块。基本上没有动画。
func animateDiscountPrice()
{
let priceText = NSMutableAttributedString(attributedString: self.priceLabel.attributedText!)
let originalPriceText = NSMutableAttributedString(attributedString: self.priceLabel.attributedText!)
let offset = priceText.length
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
if let compareAtString : String = self.productData["compare_at_price_min"] as? String {
let compareAtPrice = NSMutableAttributedString(string: "$\(compareAtString)", attributes: myAttribute )
var i = 0
let count = compareAtString.characters.count+1
dispatch_async(dispatch_get_main_queue(), {
UIView.animateWithDuration(NSTimeInterval(count), delay:0, options: [.Repeat, .Autoreverse, .AllowUserInteraction, .CurveLinear],
animations: {
UIView.setAnimationRepeatCount(Float(count))
priceText.appendAttributedString(compareAtPrice.attributedSubstringFromRange(NSMakeRange(i, 1)))
priceText.addAttribute(NSForegroundColorAttributeName, value: discountColor, range: NSMakeRange(offset, i+1))
self.priceLabel.attributedText = priceText
i = i + 1
},
completion: { (finished) in
if(finished)
{
originalPriceText.appendAttributedString(compareAtPrice)
originalPriceText.addAttribute(NSForegroundColorAttributeName, value: discountColor, range: NSMakeRange(offset, compareAtPrice.length))
//self.priceLabel.attributedText = originalPriceText
}
}
)
})
}
}
}
在日志行中我可以看到动画只为每个正在显示的单元调用一次,然后调用完成方法。