我正在构建一个增强现实应用程序,当它扫描单个图像时,我希望它自动播放视频。

当前,我必须点击图像上的一个按钮才能使用单击手势方法播放视频。

- (void)handleTap:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
       // handling code
       CGPoint touchPoint = [sender locationInView:eaglView];
       [eaglView handleTouchPoint:touchPoint];
    }
}

现在,我想在扫描完成且视频准备播放时使用NSNotification模拟

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test) name:@"singleTap" object:nil];

-(void)test
{
    [self handleTap:nil];
}

但是它会崩溃,因为我将其发送为nil,如何将sender.state发送到handleTap方法,因为它期望sender.state=UIGestureRecognizerStateEnded

谢谢。

===============>>#1 票数:2 已采纳

您无需测试UITapGestureRecognizer的状态,它是一个离散手势,调用handleTap方法时,它只有一个状态(UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded)。

因此,您可以这样做:

- (void)handleTap:(UITapGestureRecognizer *)sender {
   // handling code
   CGPoint touchPoint = [sender locationInView:eaglView];
   [eaglView handleTouchPoint:touchPoint];
}

并模拟它:

-(void)test
{
    [self handleTap:nil];
}

===============>>#2 票数:0

在.h文件中:

UITapGestureRecognizer *tapRecog;

并进入.m文件:在viewDidLoad中

tapRecog = [UITapGestureRecognizer alloc] init];
[YourImage addObserver:self forKeyPath:@"singleTap" options:0 context:nil];
[YourImage addSubview:tapRecog];

接着:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"singleTap"])
    {
        [self test];
    }
}

然后修改测试功能:

-(void)test
{
    [self handleTap:tapRecog];
}

  ask by user3231429 translate from so

未解决问题?本站智能推荐: