-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathBlockView.m
More file actions
executable file
·138 lines (104 loc) · 3.75 KB
/
Copy pathBlockView.m
File metadata and controls
executable file
·138 lines (104 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
// BlockView.m
// MURAL
//
// Created by jinchunhao on 8/3/16.
// Copyright © 2016 jinchunhao. All rights reserved.
//
#import "BlockView.h"
@implementation BlockView
@synthesize componentID = _componentID;
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)setComponentID:(NSString *)componentID
{
_componentID = componentID;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//里面逻辑只是参考 根据自己布局写
//当动画view触发的时候 找底层scrollview 设置不滚动
//如果是动画view
if([_componentID isEqualToString:@"animationView"]){
//先找拦截层
UITouch *touch = [touches anyObject];
UIView *touchView = touch.view;
BOOL findBlockView = YES;
UIView *currentSuperView = touchView;
UIView *superBlockView;
while (findBlockView) {
currentSuperView = currentSuperView.superview;
if([currentSuperView isKindOfClass:self.class]){
superBlockView = currentSuperView;
}
if([NSStringFromClass(currentSuperView.class) isEqualToString:@"XSYRootView"]){
findBlockView = NO;
}
}
if(superBlockView){
UIView *view = superBlockView;
BOOL isNotRootView = true;
while (isNotRootView) {
view = view.superview;
//在找底层滑动scrollview
if([NSStringFromClass(view.class) isEqualToString:@"RCTCustomScrollView"])
{
// RCTXSYCustomScrollView *customScrollView = (RCTXSYCustomScrollView*)view;
((UIScrollView *)view).scrollEnabled = NO;
isNotRootView = NO;
}
if([NSStringFromClass(view.class) isEqualToString:@"XSYRootView"]){
isNotRootView = NO;
}
}
}
}
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
[self _setContainScrollEnabled:[touches anyObject].view];
}
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
[self _setContainScrollEnabled:[touches anyObject].view];
}
- (void)_setContainScrollEnabled:(UIView *) currentView{
//还原设置
if([_componentID isEqualToString:@"animationView"]){
//先找拦截层
UITouch *touch = [touches anyObject];
UIView *touchView = touch.view;
BOOL findBlockView = YES;
UIView *currentSuperView = touchView;
UIView *superBlockView;
while (findBlockView) {
currentSuperView = currentSuperView.superview;
if([currentSuperView isKindOfClass:self.class]){
superBlockView = currentSuperView;
}
if([NSStringFromClass(currentSuperView.class) isEqualToString:@"XSYRootView"]){
findBlockView = NO;
}
}
if(superBlockView){
UIView *view = superBlockView;
BOOL isNotRootView = true;
while (isNotRootView) {
view = view.superview;
//在找底层滑动scrollview
if([NSStringFromClass(view.class) isEqualToString:@"RCTCustomScrollView"])
{
// RCTXSYCustomScrollView *customScrollView = (RCTXSYCustomScrollView*)view;
((UIScrollView *)view).scrollEnabled = YES;
isNotRootView = NO;
}
if([NSStringFromClass(view.class) isEqualToString:@"XSYRootView"]){
isNotRootView = NO;
}
}
}
}
}
@end