0

早上好,我通过 ViewController 类中的 startPreview 方法将 AVCaptureVideoPreviewLayer 添加到了我的视图中。

- (void) startPreview
{
    preview = [[CameraEngine engine] getPreviewLayer];
    [preview removeAllAnimations];

    preview.frame = self.imageView.bounds;
    [[preview connection] setVideoOrientation:AVCaptureVideoOrientationPortrait];

    [self.cameraView.layer addSublayer:preview];
    [self.imageView.layer addSublayer:preview];    
}

然后我有以下方法将图标添加到视图

- (void)addIcon:(NSNotification *)notification{

   UIView* iview;

   NSDictionary* userInfo2 = [notification userInfo];
   int originX = [userInfo2[@"originX"]intValue];
   int originY = [userInfo2[@"originY"]intValue];

   iview = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mouse_ico.png"]];

   [iview setFrame:CGRectMake(0,0, iview.frame.size.width/4, iview.frame.size.height/4)];
   [iview setUserInteractionEnabled:NO];
   [self.view addSubview:iview];
   [self.view setNeedsDisplay];
}

如果我通过代码调用方法“addIcon”

[self addIcon:(NSNotification*)nil];

从方法“startPreview 它工作正常。当我等待来自另一个类的事件时,图标没有出现。我调试了代码并且事件被正确触发,并且方法 addIcon 被调用。“self.view”具有相同的当从 startPreview 到达 addIcon 以及由 NotificationCenter 触发时的内存地址。

谢谢

4

1 回答 1

1

检查您的addIcon方法是否始终在调试器的主线程中运行。在后台线程上更新 ui 元素会产生您所看到的结果,不应该这样做。

这是一个如何包装视图更新代码的示例,以便它始终在主线程上运行。

dispatch_async(dispatch_get_main_queue(), ^{
        //put update view code in here
    });
于 2013-06-20T13:46:43.033 回答