특정 뷰가 쉐이크 제스처에 응답하는 것을 방지하려면 어떻게해야합니까?
-
18-09-2019 - |
문제
응용 프로그램에 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];
}
그런 다음 두 번째보기 컨트롤러는 쉐이크 제스처에 대한 응답을 중단합니다.
제휴하지 않습니다 StackOverflow