ฉันจำได้ว่าย้อนกลับไปใน iOS 3.x วันเราไม่มี LED API แบบง่าย เราต้องเริ่มเซสชันการจับภาพวิดีโอแบบเต็ม ปรากฎว่าเมื่อเทียบกับ iPhone 11 นี่น่าจะเป็นทางออกเดียว ฉันชอบที่จะได้ยินเกี่ยวกับผู้อื่นซึ่งไม่ต้องการสิ่งนี้
นี่คือวิธีแก้ปัญหาผ่านการทดสอบของฉัน ฉันใช้ Objective C ที่นี่ไม่ใช่ Swift เพราะนั่นคือสิ่งที่ฉันใช้ในแอพเก่านี้ตั้งแต่ปี 2009! คุณสามารถค้นหารหัส Swift เพื่อเริ่มการจับภาพวิดีโอได้อย่างง่ายดาย (และไม่สนใจเอาต์พุตมันควรจะทำงานเหมือนกัน
AVCaptureSession* session = [[AVCaptureSession alloc] init];
AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];
if ([session canAddInput:deviceInput]) {
[session addInput:deviceInput];
}
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CALayer *rootLayer = self.view.layer;
[rootLayer setMasksToBounds:YES];
CGRect frame = self.view.frame;
[previewLayer setFrame:frame];
[rootLayer insertSublayer:previewLayer atIndex:0];
//This is where you'd save the video with AVCaptureVideoDataOutput but of course we don't.
[session startRunning];
และหลังจากนี้คุณก็เริ่ม LED ตามปกติ:
NSError *error = nil;
if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];
สิ่งนี้ได้รับความสว่างสูงสุดบน iPhone 11 Pro ของฉัน ตอนนี้ฉันกำลังมองหาโซลูชันเดียวกันโดยไม่ต้องใช้การจับภาพวิดีโอ (ซึ่งเห็นได้ชัดว่าใช้แบตเตอรี่และต้องได้รับอนุญาตซึ่งผู้ใช้อาจไม่ชอบต้องอธิบายให้ดี)