0

独自のカメラボタンを備えたcameraOverlayがありtakePicture、カメラボタンを押してデリゲートメソッドを使用するときにこのメソッドを使用します

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info{
    [CommonClass AddToStack:@"ReviewController:imagePickerController"];
    PhotoOverlay *overlay = (PhotoOverlay*)picker.cameraOverlayView;
    [overlay setupImage:[info objectForKey:UIImagePickerControllerOriginalImage]];
}

このsetupImage:メソッドは、オーバーレイ上にあるUIImageViewの画像を設定するだけです。

これに伴う問題は、takePictureとimagepickerデリゲートメソッドの間に0.3秒のギャップがあるため、非常に奇妙に見えることです。カスタムオーバーレイを使用すると、アプリがカメラを押すことから最終ビューにすぐに移行するのを見てきました。

誰かがこれに遭遇しましたか?

4

1 に答える 1

1

インスタント画像を取得する方法は、画面のスクリーンショットを作成し、最初にその画像を使用してから、を呼び出し、takePicture準備ができたらスクリーンショットに置き換えることです(スクリーンショットは実際の画像よりも低解像度です)。

これが私のスニペットです:

-(void)CameraPressedTake
{
extern CGImageRef UIGetScreenImage();
PhotoOverlay *overlay = (PhotoOverlay*)cameraPicker.cameraOverlayView;

CGImageRef cgoriginal = UIGetScreenImage();

float width = 320.0;
float height = 480.0-[overlay myHeight];
//if it's retina...
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) {
    width = 2*width;
    height = 2*height;
}
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, CGRectMake(0, 0, width, height));            
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];
[overlay setupImage:viewImage];
CGImageRelease(cgoriginal);                
CGImageRelease(cgimg);
[cameraPicker takePicture];
}
于 2012-02-11T01:58:11.100 に答える