iOS 8 การสแนปชอตมุมมองที่ไม่ได้แสดงผลเป็นสแน็ปช็อตที่ว่างเปล่า


228

ใน iOS 8 ฉันมีปัญหาในการจับภาพจากกล้องจนถึงตอนนี้ฉันกำลังใช้รหัสนี้สำหรับ

UIImagePickerController *controller=[[UIImagePickerController alloc] init];
controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
controller.delegate=(id)self;
controller.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];

แต่ใน iOS 8 ฉันได้รับสิ่งนี้:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

ฉันได้ลองด้วยวิธีการแก้ปัญหาที่โพสต์นี้ด้วย

@property (strong,nonatomic)UIImagePickerController *controller;

_controller=[[UIImagePickerController alloc] init];
_controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
_controller.delegate=(id)self;
_controller.sourceType=UIImagePickerControllerSourceTypeCamera;
_[self presentViewController:controller animated:YES completion:nil];

และนี่

...
controller.modalPresentationStyle=UIModalPresentationFullScreen;
or
controller.modalPresentationStyle=UIModalPresentationCurrentContext;
...

และนี่

double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self presentViewController:controller animated:YES completion:nil];
});

และนี่

[self presentViewController:controller animated:YES completion:NULL];

และนี่

[self presentViewController:controller animated:YES completion:^{

}];

ความคิดใด ๆ


3
มีปัญหาเดียวกันและข้อผิดพลาดเพิ่มเติมนี้เพิ่มเติมทำให้แอปของฉันล้มเหลวเป็นครั้งคราว หวังว่าการอัพเดต 8.0.2 จะแก้ไขข้อผิดพลาดนี้ เมื่อฉันเรียกใช้แอพของฉันใน iOS7 มันใช้งานได้อย่างมีเสน่ห์โดยไม่มีคำเตือนโง่ ๆ ดูเหมือนว่า iOS 8 จะมีเสถียรภาพในระยะยาว
NCFUSN

9
เหตุการณ์ที่มีการอัพเดต 8.0.2 ปัญหานี้ยังคงมีอยู่
ArdenDev

2
ฉันมีปัญหาเดียวกัน หลังจากที่ฉันถ่ายภาพฉันกำลังประมวลผลในเธรดอื่น หลังจากที่ฉันย้ายรหัสไปยังเธรดหลักแล้วทุกอย่างก็โอเค คือรหัสของฉันก่อนหน้านี้คือ: dispatch_async(dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ซึ่งฉันเปลี่ยนเป็นdispatch_async(dispatch_get_main_queue(), ^{
mikeyq6

9
ปัญหาเดียวกันนี้เกิดขึ้นใน iOS 8.1
Raptor

12
เกิดขึ้นใน iOS 9 เช่นกัน
Sebyddd

คำตอบ:


131

ฉันค่อนข้างมั่นใจว่านี่เป็นเพียงข้อบกพร่องใน iOS 8.0 มันทำซ้ำได้ด้วยแอพ POC ที่ง่ายที่สุดที่ไม่ทำอะไรมากไปกว่าการพยายามนำเสนอแบบที่UIImagePickerControllerคุณทำข้างต้น นอกจากนี้ไม่มีรูปแบบทางเลือกในการแสดงตัวเลือกรูปภาพ / กล้องเพื่อความรู้ของฉัน คุณยังสามารถดาวน์โหลดแอปตัวอย่างการใช้ UIImagePickerControllerของ Apple เรียกใช้และมันจะสร้างข้อผิดพลาดเดียวกันออกมาจากกล่อง

ที่กล่าวว่าฟังก์ชั่นยังคงใช้ได้สำหรับฉัน นอกเหนือจากคำเตือน / ข้อผิดพลาดคุณมีปัญหากับการทำงานของแอพของคุณหรือไม่?


2
ใช่อาจเป็นข้อผิดพลาดรหัสทำงานได้ดีสำหรับฉันเช่นกัน
souvickcse

4
@souvickcse ฉันพบข้อผิดพลาดนี้เช่นกัน เมื่อใดก็ตามที่มันเกิดขึ้นภาพตัวอย่างที่ปรากฏขึ้นเมื่อถ่ายภาพใหม่เป็นสีดำสนิท อย่างไรก็ตามปุ่ม "ใช้ซ้ำ" และ "ใช้ภาพถ่าย" ที่ด้านล่างของหน้าจอยังคงปรากฏและทำงานอย่างถูกต้อง คุณเป็นพยานพฤติกรรมเดียวกันนี้หรือไม่?
Barry Beerman

3
@souvickcse ฉันใช้กล้อง PhoneGap พื้นฐานปลั๊กอินล่าสุดอยู่ที่นี่: github.com/apache/cordova-plugin-camera ทุกอย่างทำงานได้ดีกับ iOS 7.1 ที่ทำงานบน iPhone 5 แต่ฉันไม่สามารถหาวิธีที่จะทำให้มันทำงานอย่างถูกต้องโดยใช้ iOS 8 บน iPhone 6
Barry Beerman

2
เช่นเดียวกับฉันด้วย iOS8.1 final
fvisticot

4
ยังคงอยู่ใน IOS 9
สาธุคุณ

45

ฉันกำลังดิ้นรนกับปัญหานี้หลายชั่วโมงฉันได้อ่านทุกหัวข้อที่เกี่ยวข้องและพบว่าข้อผิดพลาดเกิดขึ้นเนื่องจากการตั้งค่าความเป็นส่วนตัวของอุปกรณ์ของฉันการเข้าถึงแอพกล้องของฉันถูกบล็อก !!! ฉันไม่เคยปฏิเสธการเข้าถึงกล้องและฉันไม่รู้ว่ามันถูกบล็อคอย่างไร แต่นั่นเป็นปัญหา!


4
ฉันไม่แน่ใจว่ามันได้ผลจริงสำหรับคุณ แต่มันไม่ได้ผลสำหรับฉัน ฉันแค่หวังว่า @KevinH นั้นถูกต้อง
Deepak Thakur

4
ไม่, มีการตรวจสอบการเข้าถึงกล้องสำหรับแอพนั้นในกรณีของฉัน. แต่ฉันเชื่อว่าสิ่งนี้อาจเกิดขึ้นโดยอ้อมแม้ว่าการตั้งค่า: การเปลี่ยนแปลงการตั้งค่าจะไม่ส่งผลทันทีบางคนในคูเปอร์ติโนต้องปรับการโทรเพื่อซิงโครไนซ์ที่อื่น
Anton Tropashko

ข้อเสนอแนะนี้แก้ไขปัญหาให้ฉันได้ ก่อนหน้านี้ฉันแตะ "ไม่อนุญาต" เมื่อตัวเลือกกล้องปรากฏขึ้นในแอปของฉัน ฉันคิดว่ามันจะถามฉันทุกครั้งที่ฉันเปิดกล้อง แต่มันก็ไม่ได้ ฉันต้องไปที่การตั้งค่า> ความเป็นส่วนตัว> กล้องและเปิดแถบเลื่อนสำหรับแอพของฉัน จากนั้นก็ทำงานได้อย่างถูกต้อง ดูเหมือน sorta silly ในส่วนของ Apple ที่จะไม่ถามในแต่ละครั้ง ...
John Contarino

แน่นอนบางครั้งเราไม่สามารถคิดว่าปัญหาที่เกิดขึ้นสำหรับข้อผิดพลาดประเภทนี้ ขอบคุณเพื่อนที่เป็นประโยชน์มาก
Mr.Javed Multani

ตัวเลือกที่ดีที่สุดคือก่อนที่จะใช้กล้องเพื่อตรวจสอบว่ามีการใช้งานความสามารถหรือไม่หากไม่แจ้งเตือนผู้ใช้ว่าการถ่ายภาพไม่สามารถใช้งานได้จนกว่ากล้องจะเปิดใช้งานการตั้งค่า ใน iOS 10 เป็นไปได้ที่จะส่งผู้ใช้ไปยังการตั้งค่าแอพเฉพาะ (เป็นไปได้ก่อน iOS 8 แต่ไม่สามารถทำได้ใน iOS 8 และ 9 หากฉันจำได้ถูกต้อง)
kindaian

33

ฉันมีคะแนนชื่อเสียงไม่เพียงพอที่จะแสดงความคิดเห็นในคำตอบของ @ greg ด้านบนดังนั้นจะเพิ่มข้อสังเกตของฉันที่นี่ ฉันมีโครงการ Swift สำหรับทั้ง iPad และ iPhone ฉันมีวิธีการในตัวควบคุมมุมมองหลักของฉัน (บิตที่เกี่ยวข้องด้านล่าง) เมื่อฉันทดสอบสิ่งนี้ทางโทรศัพท์ทุกอย่างทำงานได้อย่างถูกต้องและไม่มีการสร้างคำเตือน เมื่อฉันเรียกใช้บน iPad ทุกอย่างทำงานได้อย่างถูกต้อง แต่ฉันเห็นคำเตือนเกี่ยวกับการจับภาพมุมมอง อย่างไรก็ตามบิตที่น่าสนใจคือเมื่อฉันรันบน iPad โดยไม่ใช้ตัวควบคุมป็อปโอเวอร์ทุกอย่างทำงานได้อย่างถูกต้องโดยไม่มีการเตือน น่าเสียดายที่ Apple สั่งให้ใช้ตัวเลือกรูปภาพภายใน popover บน iPad หากไม่ได้ใช้กล้อง

    dispatch_async(dispatch_get_main_queue(), {
        let imagePicker: UIImagePickerController = UIImagePickerController();
        imagePicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum;
        imagePicker.mediaTypes = [kUTTypeImage];
        imagePicker.allowsEditing = false;
        imagePicker.delegate = self;

        if(UIDevice.currentDevice().userInterfaceIdiom == .Pad){ // on a tablet, the image picker is supposed to be in a popover
            let popRect: CGRect = buttonRect;
            let popover: UIPopoverController = UIPopoverController(contentViewController: imagePicker);
            popover.presentPopoverFromRect(popRect, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Up, animated: true);
        }else{
            self.presentViewController(imagePicker, animated: true, completion: nil);
        }
    });

ดูเหมือนว่านี่เป็นข้อเสนอแนะที่ถูกต้องเพราะฉันมีข้อผิดพลาดนั้นแม้กับ iOS 9.0.2 ฉันมีแอป iPhone เท่านั้นและเมื่อฉันเรียกใช้บน iPad Mini ฉันเห็นข้อความนั้นเมื่อแสดงตัวเลือกรูปภาพ ด้วยเหตุผลบางอย่าง iOS คิดว่าฉันใช้แอพ iPad
John Tracid

16

ฉันวิ่งเข้าไปในนี้หลังจากเรียก UIImagePickerController presentViewController: จากการเรียกกลับไปยังผู้แทน UIAlertView ฉันแก้ไขปัญหาโดยการกด presentViewController: เรียกการติดตามการดำเนินการปัจจุบันโดยใช้ dispatch_async

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    dispatch_async(dispatch_get_main_queue(), ^{
        UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
        imagePickerController.delegate = self;

        if (buttonIndex == 1)
            imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        else
            imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

        [self presentViewController: imagePickerController
                           animated: YES
                         completion: nil];
    });
}

นี่คือสิ่งที่แก้ไขได้สำหรับฉัน ฉันพยายามนำเสนอ UIImagePickerController จากภายในบล็อกการกระทำของ UIAlertAction
josefdlange

AlertView เลิกใช้แล้วจะทำงานได้ไหมถ้าฉันใช้ async ในการดำเนินการของ UIAlertViewController แทน
DrPatience

@DrPatience แน่นอน dispatch_async ทำงานได้ทุกที่ที่คุณต้องการ ฉันไม่รู้ว่ามันจำเป็น (ขึ้นอยู่กับรหัสของคุณ) อ่านบน GCD - มันมีประโยชน์หลายอย่าง
เกอร์

12

ฉันมีปัญหานี้เมื่อเคลื่อนไหวบางมุมมองและแอพจะเข้าสู่โหมดพื้นหลังและกลับมา ฉันจัดการโดยตั้งค่าสถานะ isActive ฉันตั้งค่าเป็นไม่เข้า

- (void)applicationWillResignActive:(UIApplication *)application

และใช่ใน

- (void)applicationDidBecomeActive:(UIApplication *)application

และทำให้เคลื่อนไหวหรือไม่เคลื่อนไหวมุมมองของฉันตาม ดูแลปัญหา


11

ฉันมีสิ่งนี้ด้วย UIAlertControllerStyleActionSheet ให้ผู้ใช้มีตัวเลือกในการถ่ายภาพด้วยกล้องหรือใช้จากห้องสมุด

ฉันลองเบรกพอยต์สัญลักษณ์ในข้อความแสดงข้อผิดพลาด ป้อนคำอธิบายรูปภาพที่นี่

นั่นแสดงให้ฉันเห็นข้อผิดพลาดที่เกิดจากการใช้งาน UICollectionView ในระหว่างการนำเสนอ

[self presentViewController:alert animated:YES completion:nil];

ป้อนคำอธิบายรูปภาพที่นี่

ฉันแก้ไขสิ่งนี้ด้วยการตั้งกรอบอย่างชัดเจนก่อนนำเสนอ

[alert setPreferredContentSize: alert.view.frame.size];

นี่คือ methode ที่สมบูรณ์ซึ่งทำงานได้โดยไม่มีข้อผิดพลาด

-(void)showImageSourceAlertFromSender:(id)sender{
UIButton *senderButton = (UIButton*)sender;
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault
                                                     handler:^(UIAlertAction *action) {
                                                         [self takePhoto];
                                                     }];
UIAlertAction *libraryAction = [UIAlertAction actionWithTitle:@"Library" style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [self selectPhotoFromLibraryFromSender:sender];
                                                      }];
[alert addAction:cameraAction];
[alert addAction:libraryAction];
alert.popoverPresentationController.delegate = self;
alert.popoverPresentationController.sourceRect = senderButton.frame;
alert.popoverPresentationController.sourceView = self.view;

[alert setPreferredContentSize: alert.view.frame.size];

[self presentViewController:alert animated:YES completion:^(){
}];}

10

คุณสามารถปิดเสียงเตือน "Snapshotting a view" ได้โดยอ้างอิงviewคุณสมบัติก่อนแสดงตัวควบคุมมุมมอง การทำเช่นนี้จะทำให้มุมมองโหลดและอนุญาตให้ iOS แสดงผลก่อนที่จะถ่ายภาพ

UIAlertController *controller = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
controller.modalPresentationStyle = UIModalPresentationPopover;
controller.popoverPresentationController.barButtonItem = (UIBarButtonItem *)sender;

... setup the UIAlertController ... 

[controller view]; // <--- Add to silence the warning.

[self presentViewController:controller animated:YES completion:nil];

นั่นเป็นเคล็ดลับที่มีประโยชน์เกือบเหลือเชื่อ ขอบคุณ!!!! (ในกรณีของฉันฉันยังคงได้รับคำเตือน แต่แอพจะไม่ล่มอีกต่อไป)
Fattie

อย่างไรก็ตามเมื่อฉันเพิ่มcameraOverlayViewโชคไม่ดีที่ฉันยังคงได้รับปัญหานี้แม้ว่าฉันจะใช้เคล็ดลับนี้
Fattie

8

สำหรับทุกคนที่เห็นปัญหาเกี่ยวกับการแสดงตัวอย่างสีดำหลังจากการจับภาพการซ่อนแถบสถานะหลังจากที่ UIPickerController ปรากฏขึ้นดูเหมือนว่าจะแก้ไขปัญหาได้

UIImagePickerControllerSourceType source = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
UIImagePickerController *cameraController = [[UIImagePickerController alloc] init];
        cameraController.delegate = self;
        cameraController.sourceType = source;
        cameraController.allowsEditing = YES;
        [self presentViewController:cameraController animated:YES completion:^{
            //iOS 8 bug.  the status bar will sometimes not be hidden after the camera is displayed, which causes the preview after an image is captured to be black
            if (source == UIImagePickerControllerSourceTypeCamera) {
                [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
            }
        }];

1
! สิ้นเชิงบันทึกวันของฉันฉันได้ลองวิธีการดังกล่าวไม่มี worked.and นี้ทำงาน
สแตน

วิธีแก้ปัญหาไม่ทำงาน ฉันคิดว่าเมื่อเราจับภาพในเวลานั้น StatusBar ซ่อนไว้แล้ว
Mihir Oza

5

ฉันพบปัญหาเดียวกันและลองทุกอย่าง ฉันมีแอพที่แตกต่างกันสองแอพหนึ่งในวัตถุประสงค์ C และอีกแอปหนึ่งที่รวดเร็ว - ทั้งคู่มีปัญหาเดียวกัน ข้อความแสดงข้อผิดพลาดมาในตัวดีบักเกอร์และหน้าจอจะเป็นสีดำหลังจากภาพถ่ายแรก สิ่งนี้เกิดขึ้นใน iOS> = 8.0 เท่านั้นมันเป็นจุดบกพร่อง

ฉันพบวิธีแก้ปัญหาที่ยากลำบาก ปิดการควบคุมกล้องด้วย imagePicker.showsCameraControls = false และสร้างภาพซ้อนทับของคุณเองที่มีปุ่มที่หายไป มีบทเรียนมากมายเกี่ยวกับวิธีการทำเช่นนี้ ข้อความแสดงข้อผิดพลาดแปลกยังคงอยู่ แต่อย่างน้อยหน้าจอจะไม่เป็นสีดำและคุณมีแอพที่ใช้งานได้


ฉันมีปัญหาเดียวกันกับคุณโปรดดูคำตอบของฉันด้านล่าง
Dan

5

นี่อาจเป็นข้อบกพร่องของ ImagePickerController ในตัว รหัสของฉันใช้งานได้ แต่เกิดปัญหากับ iPhone 6 Plus เป็นครั้งคราว

ฉันได้ลองวิธีแก้ปัญหาทั้งหมดที่แนะนำโดยคำตอบอื่น ๆ แต่ไม่มีโชค แก้ไขปัญหาในที่สุดหลังจากเปลี่ยนJPSImagePickerController


3

ฉันลองทุกอย่างแล้วปัญหาของฉันคือตัวเลือกรูปภาพสำหรับกล้องและคลังรูปภาพหายไปทันทีหลังจากที่พวกเขาพบ ฉันแก้ไขด้วยบรรทัดต่อไปนี้ (รวดเร็ว)

imagePicker.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext

3

ฉันค่อนข้างมั่นใจว่านี่เป็นเพียงข้อบกพร่องใน iOS 8.0 มันทำซ้ำได้ด้วยแอพ POC ที่ง่ายที่สุดที่ไม่ทำอะไรมากไปกว่าความพยายามที่จะนำเสนอ UIImagePickerController เหมือนที่คุณทำข้างต้น นอกจากนี้ไม่มีรูปแบบทางเลือกในการแสดงตัวเลือกรูปภาพ / กล้องเพื่อความรู้ของฉัน คุณยังสามารถดาวน์โหลดแอปตัวอย่างการใช้ UIImagePickerController ของ Apple เรียกใช้และมันจะสร้างข้อผิดพลาดเดียวกันออกมาจากกล่อง

ที่กล่าวว่าฟังก์ชั่นยังคงใช้ได้สำหรับฉัน นอกเหนือจากคำเตือน / ข้อผิดพลาดคุณมีปัญหากับการทำงานของแอพของคุณหรือไม่?


3

หากเรากำลังใช้ UIImagePickerControllerเป็นคุณสมบัติคำเตือนนี้จะหายไปสมมติว่าเราไม่ได้ใช้ผลลัพธ์จากUIImagePickerController, หากเราทำการอินสแตนซ์UIImagePickerControllerภายในฟังก์ชัน


2

การเรียกวิธีนี้ใช้สำหรับฉัน วางไว้หลังจากการนำเสนอมุมมองของคุณ

[yourViewBeingPresented.view layoutIfNeeded];

1

ฉันยังพบปัญหาเดียวกันและแก้ไขด้วยการตรวจสอบว่ามีกล้องนี้หรือไม่:

BOOL cameraAvailableFlag = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    if (cameraAvailableFlag)
        [self performSelector:@selector(showcamera) withObject:nil afterDelay:0.3];

1
isSourceTypeAvailable ผลตอบแทนจริงแม้ว่าฉันปฏิเสธการเข้าถึงกล้องสำหรับแอพของฉัน จอแสดงผลว่างเปล่าหากการเข้าถึงกล้องถูกปฏิเสธ
Καrτhικ

1

ฉันเจอปัญหานี้แล้ว เมื่อเราเรียกกล้องและปล่อยมุมมองที่สร้างปัญหานี้ สำหรับตัวอย่างโทรกล้องและตั้งค่ามุมมองศูนย์ในวิธี viewDidDisappear ข้อผิดพลาดนี้จะเกิดขึ้นเนื่องจากไม่มีการติดต่อกลับสำหรับเหตุการณ์กล้อง ตรวจสอบให้แน่ใจเกี่ยวกับกรณีนี้ด้วยสำหรับข้อผิดพลาดนี้


1

ฉันได้รับข้อผิดพลาดเดียวกันได้รับข้อความร้องในคอนโซลขณะเปิดกล้อง

'การสแนปชอตมุมมองที่ไม่ได้แสดงผลลัพธ์ในสแน็ปช็อตที่ว่างเปล่า ตรวจสอบให้แน่ใจว่ามุมมองของคุณมีการแสดงผลอย่างน้อยหนึ่งครั้งก่อนที่จะถ่ายภาพหน้าจอหรือถ่ายภาพหน้าจอหลังจากอัปเดตหน้าจอ '

สำหรับฉันมีปัญหากับชื่อที่แสดง Bundle ใน Info.plist file.it มันว่างเปล่าบางอย่างฉันใส่ชื่อแอพของฉันที่นั่นและตอนนี้มันทำงานได้ดีฉันไม่ได้รับการแจ้งเตือนการอนุญาตของกล้องเพราะชื่อที่แสดง Bundle ว่างเปล่า บล็อกมุมมองจากการเรนเดอร์

ปัญหาไม่ได้อยู่ในมุมมอง แต่โดยการนำเสนอโดยไม่ได้รับอนุญาตคุณสามารถตรวจสอบได้ในการตั้งค่า -> ความเป็นส่วนตัว -> กล้องหากแอปของคุณไม่อยู่ในรายการอาจมีปัญหาเหมือนกัน


1

ฉันใช้ Phonegap แต่เธรดนี้ยังคงมาเป็นอันดับแรกเมื่อ Googling เกี่ยวกับข้อความแสดงข้อผิดพลาด

สำหรับฉันปัญหานี้ได้หายไปโดยการกำหนดประเภทของภาพเป็น PNG

encodingType : Camera.EncodingType.PNG

ดังนั้นทั้งสายเป็น:

 navigator.camera.getPicture(successFunction, failFunction, { encodingType : Camera.EncodingType.PNG, correctOrientation:true, sourceType : Camera.PictureSourceType    .PHOTOLIBRARY, quality: 70, allowEdit : false , destinationType: Camera.DestinationType.DATA_URL});

ระยะของคุณอาจแตกต่างกันไป แต่นั่นก็เป็นเคล็ดลับสำหรับฉัน


1

หรือลองใช้drawViewHierarchyInRect:

สวิฟท์:

extension UIImage{

    class func renderUIViewToImage(viewToBeRendered: UIView) -> UIImage
    {
        UIGraphicsBeginImageContextWithOptions(viewToBeRendered.bounds.size, true, 0.0)
        viewToBeRendered.drawViewHierarchyInRect(viewToBeRendered.bounds, afterScreenUpdates: true)
        viewToBeRendered.layer.renderInContext(UIGraphicsGetCurrentContext()!)

        let finalImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return finalImage
    }
}

Objective-C:

- (UIImage *)snapshot:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

ดูเพิ่มเติมที่:


0

ในกรณีของฉัน (XCode 7 และ iOS 9) ฉันใช้UINavigationController"ซ่อน" ดังนั้นฉันต้องเพิ่มUINavigationControllerDelegateกล้องหรือม้วนปัจจุบันและมันทำงานได้อย่างที่ควรจะเป็น! And pickerControllerDelegate.selfไม่แสดงข้อผิดพลาดเช่นกัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.