2017-04-22 2 views

답변

0

터치가 UITouch의 유형을 사용하는 손가락 스타일러스에서 나온 것인지 확인할 수 있습니다.

if (touch.type == UITouchTypeStylus) { 
    //its touch from Stylus. 
} 

지금있는 ScrollView를 들어, 당신은있는 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])); 
      } 
    } 

하는 관찰자 추가 스크롤 뷰 a를 포함한 클래스의 이러한 통지 그에 따라 스크롤을 활성화/비활성화합니다.

+0

나는 이미 시도했지만 touchesBegan 스크롤 후 트리거되는 몇 가지 이유 때문에 scrollEnabled 내가 만지지 다음 시간에 적용되고 시작됩니다. (스타일러스로 스크롤 할 때 처음으로 스크롤 할 때) – MoHaKa

+0

이 함수'scrollViewWillBeginDragging' (UIScrollView 델리게이트에 존재 함)은 다른 어떤 것보다 먼저 ('touchesBegan'이전에) 트리거가 시작됩니다. 이 시점에서 터치의 유형을 얻을 수있는 방법이 있다면 나는 그것이 작동한다고 생각합니다. – MoHaKa

+0

이 경우 UIApplication을 서브 클래스화할 수 있으며 sendEvent 메소드를 사용할 수 있습니다. 대답에 더 자세히 설명하겠습니다. – Darshana

1

UIGestureRecognizer에서 allowedTouchTypes 속성을 설정할 수 있습니다. 예를 들어

는 :

scrollView.panGestureRecognizer.allowedTouchTypes = [UITouchType.direct.rawValue as NSNumber]