| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- //
- // VideoEffectSlider.m
- // TXLiteAVDemo
- //
- // Created by xiang zhang on 2017/11/3.
- // Copyright © 2017年 Tencent. All rights reserved.
- //
- #import "EffectSelectView.h"
- #import "UIView+Additions.h"
- #import "ColorMacro.h"
- #define EFFCT_COUNT 4
- #define EFFCT_IMAGE_WIDTH 50 * kScaleY
- #define EFFCT_IMAGE_SPACE 20
- @implementation EffectInfo
- @end
- @implementation EffectSelectView
- {
- UIScrollView *_effectSelectView;
- NSMutableArray *_selectViewList;
- }
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- _effectSelectView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0, self.width,EFFCT_IMAGE_WIDTH + 20)];
- [self addSubview:_effectSelectView];
- _selectViewList = [NSMutableArray array];
- }
- return self;
- }
- - (void)setSelectedIndex:(NSInteger)selectedIndex
- {
- if (self.momentary) return;
- if (selectedIndex < _selectViewList.count) {
- _selectedIndex = selectedIndex;
- for (UIImageView *view in _selectViewList) {
- if (view.tag == selectedIndex) {
- view.hidden = NO;
- }else{
- view.hidden = YES;
- }
- }
- }
- }
- - (void)setEffectList:(NSArray<EffectInfo *> *)effecList
- {
- [self setEffectList:effecList momentary:NO];
- }
- - (void)setEffectList:(NSArray<EffectInfo *> *)effecList momentary:(BOOL)momentary
- {
- self.momentary = momentary;
- [_effectSelectView removeAllSubViews];
- [_selectViewList removeAllObjects];
- CGFloat space = floorf(20 * kScaleX);
- CGFloat buttonSize = floorf(EFFCT_IMAGE_WIDTH);
-
- for (int i = 0 ; i < effecList.count ; i ++){
- EffectInfo *info = effecList[i];
- UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
- [btn setFrame:CGRectMake(space + (space + buttonSize) * i, 0, buttonSize, buttonSize)];
- if (info.animateIcons) {
- UIImageView* animatedImageView = [[UIImageView alloc] initWithFrame:btn.bounds];
- animatedImageView.animationImages = info.animateIcons;
- if (info.isSlow) {
- animatedImageView.animationDuration = 1.0 / 15 * effecList[i].animateIcons.count;
- }
- [animatedImageView startAnimating];
- [btn addSubview:animatedImageView];
- } else {
- [btn setImage:effecList[i].icon forState:UIControlStateNormal];
- }
- btn.layer.cornerRadius = EFFCT_IMAGE_WIDTH / 2.0;
- btn.layer.masksToBounds = YES;
- btn.titleLabel.numberOfLines = 0;
- btn.tag = i;
- [btn addTarget:self action:@selector(beginPress:) forControlEvents:UIControlEventTouchDown];
- [btn addTarget:self action:@selector(endPress:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
- [btn addTarget:self action:@selector(upInsidePress:) forControlEvents:UIControlEventTouchUpInside];
-
- UIImageView *selectView = [[UIImageView alloc]initWithFrame:btn.frame];
- [selectView setImage:effecList[i].selectIcon];
- selectView.hidden = YES;
- selectView.tag = i;
- [_selectViewList addObject:selectView];
-
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(btn.x - space/2, btn.bottom + 8, btn.width+space, 12)];
- label.text = effecList[i].name;
- label.adjustsFontSizeToFitWidth = YES;
- label.minimumScaleFactor = 0.5;
- label.textColor = [UIColor whiteColor];
- label.textAlignment = NSTextAlignmentCenter;
- label.font = [UIFont systemFontOfSize:10];
-
- [_effectSelectView addSubview:btn];
- [_effectSelectView addSubview:selectView];
- [_effectSelectView addSubview:label];
- _effectSelectView.contentSize = CGSizeMake(btn.right, buttonSize);
- }
- if (_effectSelectView.contentSize.width > self.width) {
- _effectSelectView.alwaysBounceHorizontal = YES;
- }else{
- _effectSelectView.alwaysBounceHorizontal = NO;
- }
- }
- //开始按压
- -(void) beginPress: (UIButton *) button {
- CGFloat offset = _effectSelectView.contentOffset.x;
- CGFloat diff = _effectSelectView.contentSize.width - _effectSelectView.bounds.size.width;
- if (offset < 0 || (diff > 0 && offset > diff)) {
- // 在回弹区域会触发button事件被cancel,导致收不到 TouchEnd 事件
- return;
- }
- [self.delegate onEffectBtnBeginSelect:button];
- for (UIImageView *view in _selectViewList) {
- if (view.tag == button.tag) {
- view.hidden = NO;
- }else{
- view.hidden = YES;
- }
- }
- }
- //结束按压
- -(void) endPress: (UIButton *) button {
- if (self.momentary) {
- [_selectViewList enumerateObjectsUsingBlock:^(UIImageView * obj, NSUInteger idx, BOOL * _Nonnull stop) {
- obj.hidden = YES;
- }];
- } else {
- _selectedIndex = button.tag;
- }
- [self.delegate onEffectBtnEndSelect:button];
- }
- //按压
- -(void) upInsidePress: (UIButton *) button {
- [self.delegate onEffectBtnSelected:button];
- }
- @end
|