早上好, 我通过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。 当从startPreview到达addIcon并且NotificationCenter触发时,“self.view”具有相同的内存地址。
谢谢
答案 0 :(得分:1)
检查您的addIcon
方法是否始终在调试器的主线程中运行。在后台线程上更新ui元素可以产生您看到的结果,并且不应该以这种方式完成。
以下是如何打包视图更新代码以便它始终在主线程上运行的示例。
dispatch_async(dispatch_get_main_queue(), ^{
//put update view code in here
});