123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- //
- // YOUPAIOCBarrageCell.m
- // TestApp
- //
- // Created by QMTV on 2017/8/21.
- // Copyright © 2017年 LFC. All rights reserved.
- //
- #import "YOUPAIOCBarrageCell.h"
- @interface YOUPAIOCBarrageCell()<UIGestureRecognizerDelegate>
- @end
- @implementation YOUPAIOCBarrageCell
- - (instancetype)init {
- self = [super init];
- if (self) {
- _trackIndex = -1;
- UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaiftapClick)];
- tapGes.delegate = self;
- [self addGestureRecognizer:tapGes];
- }
-
- return self;
- }
- -(void)youpaiftapClick
- {
- if(self.Clickblock)
- {
- self.Clickblock();
- }
- }
- - (void)prepareForReuse {
- [self.layer removeAnimationForKey:kBarrageAnimation];
- _barrageDescriptor = nil;
- if (!_idle) {
- _idle = YES;
- }
- _trackIndex = -1;
- }
- - (void)setBarrageDescriptor:(YOUPAIOCBarrageDescriptor *)barrageDescriptor {
- _barrageDescriptor = barrageDescriptor;
- }
- - (void)youpaifclearContents {
- self.layer.contents = nil;
- }
- - (void)youpaifconvertContentToImage {
-
- }
- - (void)sizeToFit {
- CGFloat height = 0.0;
- CGFloat width = 0.0;
- for (CALayer *sublayer in self.layer.sublayers) {
- CGFloat maxY = CGRectGetMaxY(sublayer.frame);
- if (maxY > height) {
- height = maxY;
- }
- CGFloat maxX = CGRectGetMaxX(sublayer.frame);
- if (maxX > width) {
- width = maxX;
- }
- }
-
- if (width == 0 || height == 0) {
- CGImageRef content = (__bridge CGImageRef)self.layer.contents;
- if (content) {
- UIImage *image = [UIImage imageWithCGImage:content];
- width = image.size.width/[UIScreen mainScreen].scale;
- height = image.size.height/[UIScreen mainScreen].scale;
- }
- }
-
- self.bounds = CGRectMake(0.0, 0.0, width, height);
- }
- - (void)removeSubViewsAndSublayers {
- NSEnumerator *viewEnumerator = [self.subviews reverseObjectEnumerator];
- UIView *subView = nil;
- while (subView = [viewEnumerator nextObject]){
- [subView removeFromSuperview];
- }
-
- NSEnumerator *layerEnumerator = [self.layer.sublayers reverseObjectEnumerator];
- CALayer *sublayer = nil;
- while (sublayer = [layerEnumerator nextObject]){
- [sublayer removeFromSuperlayer];
- }
- }
- - (void)youpaifaddBorderAttributes {
- if (self.barrageDescriptor.borderColor) {
- self.layer.borderColor = self.barrageDescriptor.borderColor.CGColor;
- }
- if (self.barrageDescriptor.borderWidth > 0) {
- self.layer.borderWidth = self.barrageDescriptor.borderWidth;
- }
- if (self.barrageDescriptor.cornerRadius > 0) {
- self.layer.cornerRadius = self.barrageDescriptor.cornerRadius;
- }
- }
- - (void)youpaifaddBarrageAnimationWithDelegate:(id<CAAnimationDelegate>)animationDelegate {
-
- }
- - (void)youpaifupdateSubviewsData {
-
- }
- - (void)youpaiflayoutContentSubviews {
- }
- - (CAAnimation *)barrageAnimation {
- return [self.layer animationForKey:kBarrageAnimation];
- }
- //add by leo 动画点击效果
- - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
- CGRect presentingRect =self.frame;
- //如果不在动画中则presentationLayer为空,在动画中就需要实时的判断点击是否点中动画中的动画
- if (self.layer.presentationLayer) {
- presentingRect =self.layer.presentationLayer.frame;
- }
- CGPoint superPoint = [self convertPoint:point toView:self.superview];
- BOOL isInside =CGRectContainsPoint(presentingRect, superPoint);
- return isInside;
- }
- -(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event
- {
- if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;
- // 2. 判断点在不在当前控件
- if ([self pointInside:point withEvent:event] == NO)
- return nil;
- // 3.从后往前遍历自己的子控件
- NSInteger count = self.subviews.count;
- for (NSInteger i = count - 1; i >= 0; i--) {
- UIView *childView = self.subviews[i];
- // 把当前控件上的坐标系转换成子控件上的坐标系
- CGPoint childP = [self convertPoint:point toView:childView];
- UIView *fitView = [childView hitTest:childP withEvent:event];
- if (fitView) { // 寻找到最合适的view
- return fitView;
- }
- }
- // 循环结束,表示没有比自己更合适的view
- return self;
- }
- @end
|