За изрязано наслагване на камерата трябва да разбера кога ирисът е отворен, защото моят наслагване ще се показва винаги, докато ирисът е близо (и след това ще се анимира, за да се отвори).
Някакви идеи ?
За изрязано наслагване на камерата трябва да разбера кога ирисът е отворен, защото моят наслагване ще се показва винаги, докато ирисът е близо (и след това ще се анимира, за да се отвори).
Някакви идеи ?
Можете да слушате за известието PLCameraViewIrisAnimationDidEndNotification. Тъй като това не е официално документирано, може да сте в нарушение на Apple TOS, но мисля, че докато пишете кода си така, че да е защитен срещу възможността името или договорът на това известие да се промени (така че в бъдеще вие може да не получите събитието) вероятно ще се оправите. С други думи, използвайте таймер или друга техника, за да сте сигурни, че това, което искате да направите, когато ирисът е отворен, определено ще се случи в крайна сметка, дори ако никога не получите известието...
Тривиален пример без защитното програмиране. (Разбира се, можете да регистрирате интерес само за това конкретно известие, вижте документите за центъра за уведомяване.)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notificationCallback:)
name:nil
object:nil
];
- (void) notificationCallback:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"PLCameraViewIrisAnimationDidEndNotification"]) {
NSLog(@"Iris open");
// we don't need to listen any more
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
}
Изглежда, че PLCameraViewIrisAnimationDidEndNotification вече не получава известия в iOS5.
Не мога да разбера кое е подходящото решение, когато ирисът приключи с отварянето си, трябва да има друга опция, вместо да използвам 3-секунден таймер.
Проверете тук: https://devforums.apple.com/message/561008#561008
Имам ViewController (ALImagePickerController), който държи, инициализира и представя UIImagePickerController като дъщерен контролер за изглед (имам друг дъщерен контролер за изглед за представяне на заснетото изображение, който не е показан тук) и представям (като модален) ALImagePickerController, когато искате да използвате камерата. Така че по време на този viewDidAppear на ViewContoller добавям анимация, за да доведа грациозно наслагването на камерата, докато анимацията на затвора изчезва.
@interface ALImagePickerController ()
@property (nonatomic) UIImagePickerController *cameraController;
@property (nonatomic) CameraOverlayView *overlayView;
....
@end
@implementation ALImagePickerController
....
- (void)viewDidLoad {
[super viewDidLoad];
[UIApplication sharedApplication].statusBarHidden = YES;
self.cameraController = [UIImagePickerController new];
self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
self.cameraController.delegate = self;
self.cameraController.allowsEditing = NO;
self.cameraController.showsCameraControls = NO;
....
self.overlayView = [CameraOverlayView new];
....
self.overlayView.alpha = 0;
self.cameraController.cameraOverlayView = self.overlayView;
....
// add as child view controller
[self addChildViewController:self.cameraController];
[self.view addSubview:self.cameraController.view];
[self.cameraController didMoveToParentViewController:self];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarHidden = NO;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// smoothly bring in the overlay as the native camera shutter animation opens.
[UIView animateWithDuration:0.2 delay:0.3 options:UIViewAnimationCurveEaseOut animations:^{
self.overlayView.alpha = 1.f;
} completion:nil];
}
....
@end
Начинът, по който реших този проблем, е, че инициализирам всички елементи със скритото свойство, зададено на ДА, след което извиквам 3-секунден забавен селектор, след като извикам камерата, където задавам всички елементи на скрити = НЕ. Това не е идеално решение, но изглежда работи и всяко забавяне след отваряне на ириса е незначително.
Вече трябва да знаете кога камерата е готова да направи снимка. Поне начинът, по който използвам персонализирано наслагване на камера, стартирам изгледа с нещо като self.sourceType = UIImagePickerControllerSourceTypeCamera;
и другата обичайна настройка и камерата е готова (или „ирисът е отворен“) в този момент.
В обобщение, ако някой използва персонализирано наслагване на камера по начина, по който аз съм свикнал да го използвам, ще разбере кога ирисът е отворен, защото е под ваш контрол.