我正在使用AVCaptureSession捕获图像,然后将其发送到我的服务器。
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) {
if (imageSampleBuffer != NULL) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
self.videoImageData = [imageData copy];
[self processImage:[UIImage imageWithData:imageData]];
NSString* response=[self uploadImage];
[activityIndicator removeFromSuperview];
self.takePictureBtn.enabled = YES;
[self setUserMessage:response];
}
}];
- (void) processImage:(UIImage *)image
{
...
[UIView beginAnimations:@"rotate" context:nil];
[UIView setAnimationDuration:0.5];
int degrees = [self rotationDegrees];
CGFloat radians =degrees * M_PI / 180.0;
self.captureImageView.transform = CGAffineTransformMakeRotation(radians);
[UIView commitAnimations];
[self.captureImageView setNeedsDisplay];
}
- (NSString*)uploadImage
将照片发送到服务器
我期待的行为是在processImage终止之后,图像将显示在活动指示器旋转的UIImageView captureImageView
上,而是我得到一个白色的blanc视图,指示器旋转并且只在服务器之后帖子请求终止captureImageView
显示图片
我如何实现我想要的行为?
另一个问题 我面临的是我的imageSampleBuffer返回拍摄的镜像(右侧的对象显示在右侧)
答案 0 :(得分:4)
来自文档:
这种方法使 请求的注释并立即返回。视图不是 实际重绘直到下一个绘图周期,此时全部 无效的视图已更新。
由于您在致电setNeedsDisplay
后正在做其他事情,因此事件未结束且您没有立即显示。
如果你想做更多的事情,一种方法是将剩余的东西安排在一个新的块中,比如
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSString *const response = [self uploadImage];
[activityIndicator removeFromSuperview];
self.takePictureBtn.enabled = YES;
[self setUserMessage:response];
}];