Browse Source

feat: 完善WrapperView功能,补全手势能力

yuxiangshen 5 years ago
parent
commit
2b86e1cf8f

+ 10 - 1
iOS/QGVAPlayer/QGVAPlayer/Classes/QGVAPWrapView.h

@@ -43,7 +43,11 @@ typedef NS_ENUM(NSUInteger, QGVAPWrapViewContentMode) {
 
 @end
 
-/// 封装渲染容器的View,提供ContentMode功能
+/*
+ 封装VAPView,本身不响应手势
+ 提供ContentMode功能
+ 播放完成后会自动移除内部的VAPView(可选)
+ */
 @interface QGVAPWrapView : UIView
 /// default is QGVAPWrapViewContentModeScaleToFill
 @property (nonatomic, assign) QGVAPWrapViewContentMode contentMode;
@@ -54,6 +58,11 @@ typedef NS_ENUM(NSUInteger, QGVAPWrapViewContentMode) {
                    repeatCount:(NSInteger)repeatCount
                       delegate:(id<VAPWrapViewDelegate>)delegate;
 
+//增加点击的手势识别, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效
+- (void)vapWrapView_addVapTapGesture:(VAPGestureEventBlock)handler;
+//手势识别通用接口, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效
+- (void)vapWrapView_addVapGesture:(UIGestureRecognizer *)gestureRecognizer callback:(VAPGestureEventBlock)handler;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 29 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/QGVAPWrapView.m

@@ -62,6 +62,35 @@
     [self.vapView playHWDMP4:filePath repeatCount:repeatCount delegate:self];
 }
 
+- (void)vapWrapView_addVapGesture:(UIGestureRecognizer *)gestureRecognizer callback:(VAPGestureEventBlock)handler {
+    [self initVAPViewIfNeed];
+    [self.vapView addVapGesture:gestureRecognizer callback:handler];
+}
+
+- (void)vapWrapView_addVapTapGesture:(VAPGestureEventBlock)handler {
+    [self initVAPViewIfNeed];
+    [self.vapView addVapTapGesture:handler];
+}
+
+#pragma mark - UIView
+// 自身不响应,仅子视图响应。
+- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
+    if (!self.isUserInteractionEnabled || self.isHidden || self.alpha < 0.01) {
+        return nil;
+    }
+    if ([self pointInside:point withEvent:event]) {
+        for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
+            CGPoint convertedPoint = [self convertPoint:point toView:subview];
+            UIView *hitView = [subview hitTest:convertedPoint withEvent:event];
+            if (hitView) {
+                return hitView;
+            }
+        }
+        return nil;
+    }
+    return nil;
+}
+
 #pragma mark - Private
 
 - (void)p_setupContentModeWithConfig:(QGVAPConfigModel *)config {