Я пытаюсь отменить прокрутку в UIScrollView, если она исходит от стилуса (Apple Pencil).
Любой совет?
Я пытаюсь отменить прокрутку в UIScrollView, если она исходит от стилуса (Apple Pencil).
Любой совет?
Вы можете установить свойство allowedTouchTypes
в UIGestureRecognizer.
Например:
scrollView.panGestureRecognizer.allowedTouchTypes = [UITouchType.direct.rawValue as NSNumber]
Вы можете узнать, является ли касание стилусом или пальцем, используя тип UITouch.
if (touch.type == UITouchTypeStylus) {
//its touch from Stylus.
}
Теперь для прокрутки вы можете создать подкласс UIScrollview и реализовать метод TouchBegan.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if (touch.type == UITouchTypeStylus) {
self.scrollEnabled = NO;
}
else
{
self.scrollEnabled = YES;
}
[super touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if (touch.type == UITouchTypeStylus) {
self.scrollEnabled = NO;
}
else
{
self.scrollEnabled = YES;
}
[super touchesMoved:touches withEvent:event];
}
// редактор
Подкласс UIApplication:
@interface MyUIApplication : UIApplication
- (void)sendEvent:(UIEvent *)event {
[super sendEvent:event];
NSSet *allTouches = [event allTouches];
if ([allTouches count] > 0) {
/
UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
if (phase == UITouchPhaseBegan){
UITouch *touch = [allTouches anyObject];
if (touch.type == UITouchTypeStylus) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DisableScroll" object:self];
}
else
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"EnableScroll" object:self];
}
}
}
}
@end
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, NSStringFromClass([MyUIApplication class]), NSStringFromClass([AppDelegate class]));
}
}
Добавьте наблюдателя для этих уведомлений в классе, содержащем представление прокрутки, и соответственно включите/отключите прокрутку.
scrollViewWillBeginDragging
(существует в делегате UIScrollView) запускается раньше всего (даже до touchesBegan
). Если есть какой-либо способ получить тип касания на данный момент, я думаю, что это должно сработать.
- person Heysem Katibi; 22.04.2017