// // ZJCustomLabel.m // ZJScrollPageView // // Created by jasnig on 16/5/6. // Copyright © 2016年 ZeroJ. All rights reserved. // #import "ZJTitleView.h" @interface ZJTitleView() { CGSize _titleSize; CGFloat _imageHeight; CGFloat _imageWidth; BOOL _isShowImage; } @property (strong, nonatomic) UIImageView *imageView; @property (strong, nonatomic) UILabel *label; @property (strong, nonatomic) UIView *contentView; /** 后续添加 */ // TODO: - 添加badge @property (nonatomic) UIView *badgeView; @end @implementation ZJTitleView - (instancetype)init { self = [self initWithFrame:CGRectZero]; return self; } - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.currentTransformSx = 1.0; self.userInteractionEnabled = YES; self.backgroundColor = [UIColor clearColor]; _isShowImage = NO; [self addSubview:self.label]; } return self; } - (void)setCurrentTransformSx:(CGFloat)currentTransformSx { _currentTransformSx = currentTransformSx; self.transform = CGAffineTransformMakeScale(currentTransformSx, currentTransformSx); } - (void)layoutSubviews { [super layoutSubviews]; if (!_isShowImage) { self.label.frame = self.bounds; } } - (void)adjustSubviewFrame { _isShowImage = YES; CGRect contentViewFrame = self.bounds; contentViewFrame.size.width = [self titleViewWidth]; contentViewFrame.origin.x = (self.frame.size.width - contentViewFrame.size.width)/2; self.contentView.frame = contentViewFrame; self.label.frame = self.contentView.bounds; [self addSubview:self.contentView]; [self.label removeFromSuperview]; [self.contentView addSubview:self.label]; [self.contentView addSubview:self.imageView]; switch (self.imagePosition) { case TitleImagePositionTop: { CGRect contentViewFrame = self.contentView.frame; contentViewFrame.size.height = _imageHeight + _titleSize.height; contentViewFrame.origin.y = (self.frame.size.height - contentViewFrame.size.height)*0.5; self.contentView.frame = contentViewFrame; self.imageView.frame = CGRectMake(0, 0, _imageWidth, _imageHeight); CGPoint center = self.imageView.center; center.x = self.label.center.x; self.imageView.center = center; CGFloat labelHeight = self.contentView.frame.size.height - _imageHeight; CGRect labelFrame = self.label.frame; labelFrame.origin.y = _imageHeight; labelFrame.size.height = labelHeight; self.label.frame = labelFrame; break; } case TitleImagePositionLeft: { CGRect labelFrame = self.label.frame; labelFrame.origin.x = _imageWidth; labelFrame.size.width = self.contentView.frame.size.width - _imageWidth; self.label.frame = labelFrame; CGRect imageFrame = CGRectZero; imageFrame.size.height = _imageHeight; imageFrame.size.width = _imageWidth; imageFrame.origin.y = (self.contentView.frame.size.height - imageFrame.size.height)/2; self.imageView.frame = imageFrame; break; } case TitleImagePositionRight: { CGRect labelFrame = self.label.frame; labelFrame.size.width = self.contentView.frame.size.width - _imageWidth; self.label.frame = labelFrame; CGRect imageFrame = CGRectZero; imageFrame.origin.x = CGRectGetMaxX(self.label.frame); imageFrame.size.height = _imageHeight; imageFrame.size.width = _imageWidth; imageFrame.origin.y = (self.contentView.frame.size.height - imageFrame.size.height)/2; self.imageView.frame = imageFrame; break; } case TitleImagePositionCenter: self.imageView.frame = self.contentView.bounds; [self.label removeFromSuperview]; break; default: break; } } - (CGFloat)titleViewWidth { CGFloat width = 0.0f; switch (self.imagePosition) { case TitleImagePositionLeft: width = _imageWidth + _titleSize.width; break; case TitleImagePositionRight: width = _imageWidth + _titleSize.width; break; case TitleImagePositionCenter: width = _imageWidth; break; default: width = _titleSize.width; break; } return width; } - (void)setNormalImage:(UIImage *)normalImage { _normalImage = normalImage; _imageWidth = normalImage.size.width; _imageHeight = normalImage.size.height; self.imageView.image = normalImage; } - (void)setSelectedImage:(UIImage *)selectedImage { _selectedImage = selectedImage; self.imageView.highlightedImage = selectedImage; } - (void)setFont:(UIFont *)font { _font = font; self.label.font = font; } - (void)setText:(NSString *)text { _text = text; self.label.text = text; CGRect bounds = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, 0.0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: self.label.font} context:nil]; _titleSize = bounds.size; } - (void)setTextColor:(UIColor *)textColor { _textColor = textColor; self.label.textColor = textColor; } - (void)setSelected:(BOOL)selected { _selected = selected; self.imageView.highlighted = selected; } - (UIImageView *)imageView { if (_imageView == nil) { _imageView = [[UIImageView alloc] init]; _imageView.contentMode = UIViewContentModeCenter; } return _imageView; } - (UILabel *)label { if (_label == nil) { _label = [[UILabel alloc] init]; _label.textAlignment = NSTextAlignmentCenter; } return _label; } - (UIView *)contentView { if (!_contentView) { _contentView = [UIView new]; } return _contentView; } @end