iOS 고성능 간단 하고 사용 하기 쉬 운 별 평가 컨트롤 실현
오래된 운전 기사 인 당신들 은 이런 요 구 를 만난 적 이 있 습 니까?각 상품 이나 업 체 의 아 이 템 은 별 등급 이나 다른 평 점 이 있 습 니 다.대략 아래 의 효과 도 와 같 습 니 다.
구현 방안:
사고:기능 은 실현 되 었 지만 성능 은 약간 영향 을 받 는 것 같 습 니 다.구체 적 인 원인 은 제3자 프레임 의 실현 원 리 를 봐 야 한다.물론 잘 하 는 것 도 있다.저 는 개성 적 으로 통제 할 수 있 습 니 다.제 가 이 수 요 를 얻 었 을 때 제3자 도 사용 하려 고 했 지만 결과 가 만 족 스 럽 지 못 했 습 니 다.결국 XWStarView 가 생 겼 습 니 다.
XWStarView(고성능 별 컨트롤)
추천 이유:
간단 하 다
고성능
사용자 정의 별 스타일 지원,간격한계 성:
4.567917.현재 반 성 만 지원 하고 1 성 평 점 은 4.567918.
현재 사진 만 지원 합 니 다.
YYLabel 의존XWStarMaker(외관 설정)
개발 자 는 간격,최대 값,기본 그림 을 설정 하고 그림 을 선택 할 수 있 습 니 다.
@interface XWStarMaker : NSObject
@property (nonatomic, assign) CGFloat space;
@property (nonatomic, strong) NSString *defaultImage;
@property (nonatomic, strong) NSString *selectImage;
@property (nonatomic,assign) NSInteger maxValue;
@end
XWStarView.m(핵심 코드)눈치 빠 른 친구 들 은 이미 보 았 습 니 다.XWStarView 는 YY Label 을 직접 물 려 받 았 습 니 다.YYLaebl 을 잘 아 는 개발 자 들 은 제 가 무엇 을 해 야 하 는 지 알 수 있 습 니 다.
#import "YYLabel.h"
#import "XWStarMaker.h"
@class XWStarView;
@protocol XWStarViewDelegate <NSObject>
@optional
-(void)xw_starView:(XWStarView*)tagView star:(NSInteger)star;
@end
@interface XWStarView : YYLabel
@property (nonatomic, assign) NSInteger score;
@property (nonatomic,weak) id<XWStarViewDelegate> delegate;
-(instancetype)initWithFrame:(CGRect)frame maker:(void (^)(XWStarMaker *))makeBlock;
@end
구체 적 실현 세부 사항 보기.m 파일
@interface XWStarView ()
@property (nonatomic,strong) XWStarMaker *maker;
@end
@implementation XWStarView
-(instancetype)initWithFrame:(CGRect)frame maker:(void (^)(XWStarMaker *))makeBlock{
if (self = [super initWithFrame:frame]) {
self.maker = [[XWStarMaker alloc] init];
if (makeBlock) {
makeBlock(self.maker);
}
self.displaysAsynchronously = YES;
self.fadeOnAsynchronouslyDisplay = NO;
[self creatScoreAttr];
}
return self;
}
#pragma mark - private
-(void)creatScoreAttr{
NSMutableAttributedString *text = [NSMutableAttributedString new];
UIFont *font = [UIFont systemFontOfSize:0];
for (int i = 0; i < self.maker.maxValue; i++) {
UIImage *image = [UIImage imageNamed:self.maker.defaultImage];
NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:image contentMode:UIViewContentModeLeft attachmentSize:CGSizeMake(image.size.width + self.maker.space, image.size.height) alignToFont:font alignment:YYTextVerticalAlignmentCenter];
//
__weak typeof(&*self) weakSelf = self;
[attachText yy_setTextHighlightRange:NSMakeRange(0, 1) color:nil backgroundColor:nil tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(xw_starView:star:)]) {
[weakSelf.delegate xw_starView:weakSelf star:i];
}
}];
[text appendAttributedString:attachText];
}
self.attributedText = text;
}
-(void)setScore:(NSInteger)score{
if (_score == score)
{
return;
}
_score = score;
//
NSArray *attachments = self.textLayout.attachments;
for (int i = 0; i < attachments.count; i++) {
YYTextAttachment *attachment = attachments[i];
attachment.content = [UIImage imageNamed:i <= _score ? self.maker.selectImage : self.maker.defaultImage];
}
}
@end
니 가 iOS 프로그래머 라면 코드 는 다 알 겠 지.실현 은 간단 하지만 효 과 는 보통 이 아니다.특히 복잡 한 목록 을 사용 할 때 뚜렷 하 다.XWStarView 사용
_scoreView = [[XWStarView alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 40, self.frame.size.width, 40) maker:^(XWStarMaker *maker){
maker.defaultImage = @"goods_score_empt.png";
maker.selectImage = @"goods_score_full.png";
maker.space = 10;
}];
_scoreView.delegate = self;
XWStarView 는 YY Label 의 애호가 들 에 게 좋 은 선택 입 니 다.업무 수 요 를 만족 시 키 면 성능 에 만족 할 것 입 니 다.믿 지 못 하 겠 으 면 해 보 세 요(하하,장 난 스 럽 습 니 다).물론 무 와 채 소 는 각자 좋아 하 는 것 이 있 으 니 뿌리 지 마라.총결산
프로그래머 의 즐거움 은 매일 끊임없이 공부 하고 새로운 것 을 발견 하 며 버 려 지지 않도록 하 는 것 이 어야 한다.적어도 나 는 그렇게 생각한다(히히).너 는?
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.