Я згадав, що ще в iOS 3.x днів у нас не було простого світлодіодного 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];
Після цього ви просто запускаєте світлодіод, як завжди:
NSError *error = nil;
if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];
Це отримує максимальну яскравість на моєму iPhone 11 Pro. Зараз я шукаю те саме рішення, не використовуючи відеозйомку (яка, очевидно, використовує акумулятор І вимагає дозволу, який може не подобатися користувачам. Це потрібно добре пояснити).