mirror of https://github.com/oxen-io/session-ios
Merge branch 'feature/hideVideoControls' into feature/webrtc
commit
3446923060
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
// This custom GR can be used to detect touches when they
|
||||||
|
// begin in a view. In order to honor touch dispatch, this
|
||||||
|
// GR will ignore touches that:
|
||||||
|
//
|
||||||
|
// * Are not single touches.
|
||||||
|
// * Are not in the view for this GR.
|
||||||
|
// * Are inside a visible, interaction-enabled subview.
|
||||||
|
@interface OWSAnyTouchGestureRecognizer : UIGestureRecognizer
|
||||||
|
|
||||||
|
@end
|
@ -0,0 +1,84 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "OWSAnyTouchGestureRecognizer.h"
|
||||||
|
#import <UIKit/UIGestureRecognizerSubclass.h>
|
||||||
|
|
||||||
|
@implementation OWSAnyTouchGestureRecognizer
|
||||||
|
|
||||||
|
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
||||||
|
{
|
||||||
|
[super touchesBegan:touches withEvent:event];
|
||||||
|
|
||||||
|
if (self.state == UIGestureRecognizerStatePossible && [self isValidTouch:touches event:event]) {
|
||||||
|
self.state = UIGestureRecognizerStateRecognized;
|
||||||
|
} else {
|
||||||
|
self.state = UIGestureRecognizerStateFailed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isValidTouch:(NSSet<UITouch *> *)touches event:(UIEvent *)event
|
||||||
|
{
|
||||||
|
if (event.allTouches.count > 1) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
if (touches.count != 1) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
UITouch *touch = touches.anyObject;
|
||||||
|
CGPoint location = [touch locationInView:self.view];
|
||||||
|
if (!CGRectContainsPoint(self.view.bounds, location)) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([self subviewControlOfView:self.view containsTouch:touch]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)subviewControlOfView:(UIView *)superview containsTouch:(UITouch *)touch
|
||||||
|
{
|
||||||
|
for (UIView *subview in superview.subviews) {
|
||||||
|
if (subview.hidden || !subview.userInteractionEnabled) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CGPoint location = [touch locationInView:subview];
|
||||||
|
if (!CGRectContainsPoint(subview.bounds, location)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ([subview isKindOfClass:[UIControl class]]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if ([self subviewControlOfView:subview containsTouch:touch]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in New Issue