특정 뷰가 쉐이크 제스처에 응답하는 것을 방지하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1693477

문제

응용 프로그램에 Shake Gesture를 사용하지만 문제가 있습니다!

내 응용 프로그램은 멀티 뷰 응용 프로그램이며 View 2에서 Shake Gesture를 사용하고 싶습니다. View 2에서 Shake Gesture를 활성화하려면 MainViewController.m 및 MyView2Controller.m에 아래 코드를 작성하여 Shake Gesture를 사용해야합니다.

그런 다음 iPhone을 흔들면 두 관점에서 알림 표시가 필요하지 않습니다. Alert가 View 2에만 나타나기를 원합니다. 따라서 MainViewController.m 또는 View 1의 코드를 비활성화하면 더 이상보기 2에서 작동하지 않습니다!

도움이 된 도움이 감사드립니다!

대체 텍스트 http://www.freezpic.com/pics/98f1465147344642e3870bbbb599eba689.jpg

내 코드는 다음과 같습니다.

-(BOOL)canBecomeFirstResponder {
    return YES;
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

{
    if (event.subtype == UIEventSubtypeMotionShake)
    {
        UIAlertView *alet =[[UIAlertView alloc]initWithTitle:nil message:@"Shake shake shake" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alet show];
        [alet release];
        self.view.backgroundColor = [UIColor orangeColor];

    }
}
도움이 되었습니까?

해결책 2

좋아, 나는이 코드의 문제를 해결했다.

#define kAccelerationThreshold        2.2
#define kUpdateInterval               (1.0f/10.0f)

@interface info : UIViewController  <UIAccelerometerDelegate> {

}
@end

~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~

@implementation info


- (void)viewDidLoad {
    UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
    accel.delegate = self;
    accel.updateInterval = kUpdateInterval;


    [super viewDidLoad];
}


#pragma mark -
- (void)accelerometer:(UIAccelerometer *)accelerometer 
        didAccelerate:(UIAcceleration *)acceleration {
   {
        if (acceleration.x > kAccelerationThreshold 
            || acceleration.y > kAccelerationThreshold
            || acceleration.z > kAccelerationThreshold) {


//What do you want to do !

            self.view.backgroundColor = [UIColor orangeColor];



        }
    }
}

다른 팁

나는 당신의 코드가 두 번째 뷰의 뷰 컨트롤러 (Shake Gesture에 응답하려는 것)에서 나온다고 가정합니다. 이 경우 -viewwilldisappear 에서이보기 컨트롤러의 첫 번째 응답자 상태를 사임하면됩니다.

- (void)viewWillDisappear:(BOOL)animated 
{
    [super viewWillDisappear:animated];
    [self resignFirstResponder];
}

그런 다음 두 번째보기 컨트롤러는 쉐이크 제스처에 대한 응답을 중단합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top