试图在 UIImageView 上放置徽章
Trying to put a badge on an UIImageView
我构建了一个 UIImageView
扩展以使用其中的图像并向其添加徽章。但我真的做不对,因为之后我要将 UIImageView
角半径四舍五入。我想要的是在图像的 UIImageView
角上方显示徽章。
我是这样做的:
public extension UIImageView {
func addBadgeRightBottom (withBadge badge: UIImage) {
if self.image != nil {
UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 0.0)
self.image?.draw(in: CGRect(x: 0, y: 0, width: (self.frame.size.width), height: (self.frame.size.height)))
badge.draw(in: CGRect(x: (self.frame.size.width) - badge.size.width, y: (self.frame.size.height) - badge.size.height, width: badge.size.width, height: badge.size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
DispatchQueue.main.async() { () -> Void in
self.image = image
}
UIGraphicsEndImageContext()
}
}
}
这是我得到的:
我真正想要拥有的东西:
最后我通过创建一个新的 UIImageView
徽章 UIImage
大小在我想要在另一个循环 UIImageView
上的相同位置并将其添加为子视图来做到这一点我的 UICollectionViewCell
因为这些个人资料图片位于 UICollectionViewCell
不幸的是我毕竟没有把它作为一个扩展。
这是我的做法。
在CelebCollectionViewCell
class
中初始化一个UIImageView
后
var celebBadgeImageView = UIImageView()
我初始化了徽章的CGRect
,并将其添加为子视图
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: CelebCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "celebCell", for: indexPath) as! CelebCollectionViewCell
cell.celebBadgeImageView.frame = CGRect(x: cell.celebImage.frame.size.width - (#imageLiteral(resourceName: "verifiedCelebrity").size.width/2), y: cell.celebImage.frame.size.height - #imageLiteral(resourceName: "verifiedCelebrity").size.height, width: #imageLiteral(resourceName: "verifiedCelebrity").size.width, height: #imageLiteral(resourceName: "verifiedCelebrity").size.height)
cell.celebBadgeImageView.image = #imageLiteral(resourceName: "verifiedCelebrity")
cell.addSubview(cell.celebBadgeImageView)
cell.celebImage.image = #imageLiteral(resourceName: "profile_user.jpg")
cell.celebImage.circularView()
return cell
}
我构建了一个 UIImageView
扩展以使用其中的图像并向其添加徽章。但我真的做不对,因为之后我要将 UIImageView
角半径四舍五入。我想要的是在图像的 UIImageView
角上方显示徽章。
我是这样做的:
public extension UIImageView {
func addBadgeRightBottom (withBadge badge: UIImage) {
if self.image != nil {
UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 0.0)
self.image?.draw(in: CGRect(x: 0, y: 0, width: (self.frame.size.width), height: (self.frame.size.height)))
badge.draw(in: CGRect(x: (self.frame.size.width) - badge.size.width, y: (self.frame.size.height) - badge.size.height, width: badge.size.width, height: badge.size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
DispatchQueue.main.async() { () -> Void in
self.image = image
}
UIGraphicsEndImageContext()
}
}
}
这是我得到的:
我真正想要拥有的东西:
最后我通过创建一个新的 UIImageView
徽章 UIImage
大小在我想要在另一个循环 UIImageView
上的相同位置并将其添加为子视图来做到这一点我的 UICollectionViewCell
因为这些个人资料图片位于 UICollectionViewCell
不幸的是我毕竟没有把它作为一个扩展。
这是我的做法。
在CelebCollectionViewCell
class
UIImageView
后
var celebBadgeImageView = UIImageView()
我初始化了徽章的CGRect
,并将其添加为子视图
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: CelebCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "celebCell", for: indexPath) as! CelebCollectionViewCell
cell.celebBadgeImageView.frame = CGRect(x: cell.celebImage.frame.size.width - (#imageLiteral(resourceName: "verifiedCelebrity").size.width/2), y: cell.celebImage.frame.size.height - #imageLiteral(resourceName: "verifiedCelebrity").size.height, width: #imageLiteral(resourceName: "verifiedCelebrity").size.width, height: #imageLiteral(resourceName: "verifiedCelebrity").size.height)
cell.celebBadgeImageView.image = #imageLiteral(resourceName: "verifiedCelebrity")
cell.addSubview(cell.celebBadgeImageView)
cell.celebImage.image = #imageLiteral(resourceName: "profile_user.jpg")
cell.celebImage.circularView()
return cell
}