// // YOUPAIOCBarrageCell.m // TestApp // // Created by QMTV on 2017/8/21. // Copyright © 2017年 LFC. All rights reserved. // #import "YOUPAIOCBarrageCell.h" @interface YOUPAIOCBarrageCell() @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)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