123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- //
- // JXSegmentedTitleImageCell.swift
- // JXSegmentedView
- //
- // Created by jiaxin on 2018/12/29.
- // Copyright © 2018 jiaxin. All rights reserved.
- //
- import UIKit
- open class JXSegmentedTitleImageCell: JXSegmentedTitleCell {
- public let imageView = UIImageView()
- private var currentImageInfo: String?
- open override func prepareForReuse() {
- super.prepareForReuse()
- currentImageInfo = nil
- }
- open override func commonInit() {
- super.commonInit()
- imageView.contentMode = .scaleAspectFit
- contentView.addSubview(imageView)
- }
- open override func layoutSubviews() {
- super.layoutSubviews()
- guard let myItemModel = itemModel as? JXSegmentedTitleImageItemModel else {
- return
- }
- let imageSize = myItemModel.imageSize
- switch myItemModel.titleImageType {
- case .topImage:
- let contentHeight = imageSize.height + myItemModel.titleImageSpacing + titleLabel.bounds.size.height
- imageView.center = CGPoint(x: contentView.bounds.size.width/2, y: (contentView.bounds.size.height - contentHeight)/2 + imageSize.height/2)
- titleLabel.center = CGPoint(x: contentView.bounds.size.width/2, y: imageView.frame.maxY + myItemModel.titleImageSpacing + titleLabel.bounds.size.height/2)
- case .leftImage:
- let contentWidth = imageSize.width + myItemModel.titleImageSpacing + titleLabel.bounds.size.width
- imageView.center = CGPoint(x: (contentView.bounds.size.width - contentWidth)/2 + imageSize.width/2, y: contentView.bounds.size.height/2)
- titleLabel.center = CGPoint(x: imageView.frame.maxX + myItemModel.titleImageSpacing + titleLabel.bounds.size.width/2, y: contentView.bounds.size.height/2)
- case .bottomImage:
- let contentHeight = imageSize.height + myItemModel.titleImageSpacing + titleLabel.bounds.size.height
- titleLabel.center = CGPoint(x: contentView.bounds.size.width/2, y: (contentView.bounds.size.height - contentHeight)/2 + titleLabel.bounds.size.height/2)
- imageView.center = CGPoint(x: contentView.bounds.size.width/2, y: titleLabel.frame.maxY + myItemModel.titleImageSpacing + imageSize.height/2)
- case .rightImage:
- let contentWidth = imageSize.width + myItemModel.titleImageSpacing + titleLabel.bounds.size.width
- titleLabel.center = CGPoint(x: (contentView.bounds.size.width - contentWidth)/2 + titleLabel.bounds.size.width/2, y: contentView.bounds.size.height/2)
- imageView.center = CGPoint(x: titleLabel.frame.maxX + myItemModel.titleImageSpacing + imageSize.width/2, y: contentView.bounds.size.height/2)
- case .onlyImage:
- imageView.center = CGPoint(x: contentView.bounds.size.width/2, y: contentView.bounds.size.height/2)
- case .onlyTitle:
- titleLabel.center = CGPoint(x: contentView.bounds.size.width/2, y: contentView.bounds.size.height/2)
- }
- }
- open override func reloadData(itemModel: JXSegmentedBaseItemModel, selectedType: JXSegmentedViewItemSelectedType) {
- super.reloadData(itemModel: itemModel, selectedType: selectedType )
- guard let myItemModel = itemModel as? JXSegmentedTitleImageItemModel else {
- return
- }
- titleLabel.isHidden = false
- imageView.isHidden = false
- if myItemModel.titleImageType == .onlyTitle {
- imageView.isHidden = true
- }else if myItemModel.titleImageType == .onlyImage {
- titleLabel.isHidden = true
- }
- imageView.bounds = CGRect(x: 0, y: 0, width: myItemModel.imageSize.width, height: myItemModel.imageSize.height)
- var normalImageInfo = myItemModel.normalImageInfo
- if myItemModel.isSelected && myItemModel.selectedImageInfo != nil {
- normalImageInfo = myItemModel.selectedImageInfo
- }
- //因为`func reloadData(itemModel: JXSegmentedBaseItemModel, selectedType: JXSegmentedViewItemSelectedType)`方法会回调多次,尤其是左右滚动的时候会调用无数次。如果每次都触发图片加载,会非常消耗性能。所以只会在图片发生了变化的时候,才进行图片加载。
- if normalImageInfo != nil && normalImageInfo != currentImageInfo {
- currentImageInfo = normalImageInfo
- if myItemModel.loadImageClosure != nil {
- myItemModel.loadImageClosure!(imageView, normalImageInfo!)
- }else {
- imageView.image = UIImage(named: normalImageInfo!)
- }
- }
- if myItemModel.isImageZoomEnabled {
- imageView.transform = CGAffineTransform(scaleX: myItemModel.imageCurrentZoomScale, y: myItemModel.imageCurrentZoomScale)
- }else {
- imageView.transform = .identity
- }
- setNeedsLayout()
- }
- }
|