uiimageview上的setNeedsDisplay不会立即刷新视图

时间:2014-01-23 10:40:08

标签: objective-c uiimageview

我正在使用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返回拍摄的镜像(右侧的对象显示在右侧)

1 个答案:

答案 0 :(得分:4)

来自文档:

  

这种方法使   请求的注释并立即返回。视图不是   实际重绘直到下一个绘图周期,此时全部   无效的视图已更新。

由于您在致电setNeedsDisplay后正在做其他事情,因此事件未结束且您没有立即显示。

如果你想做更多的事情,一种方法是将剩余的东西安排在一个新的块中,比如

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    NSString *const response = [self uploadImage];
    [activityIndicator removeFromSuperview];
    self.takePictureBtn.enabled = YES;
    [self setUserMessage:response];
}];