Откриване, когато ирисът на камерата е отворен на iPhone

За изрязано наслагване на камерата трябва да разбера кога ирисът е отворен, защото моят наслагване ще се показва винаги, докато ирисът е близо (и след това ще се анимира, за да се отвори).

Някакви идеи ?


person strange99    schedule 15.10.2009    source източник


Отговори (5)


Можете да слушате за известието 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];
     }
}
person ddoughty    schedule 04.11.2009
comment

Добър GUI/IDE плъгин за Mercurial?

GUI

  • TortoiseHg за почти всяка операционна система. Включва интеграция с Windows Explorer. Той също така работи в Linux и няколко други OS:es, включително Max OS X. Има малко тромав интерфейс и е малко неудобен за използване в началото, но е много пълен и мощен.
  • Murky работи на Mac OS X 10.5 или по-нова версия. Murky е добър за изследване на хранилището и основните команди, но ще трябва да знаете как да използвате и командния ред.
  • MacHg е хубав Mac OS X Gui, който има малко повече функционалност и изпипаност от Murky, но все пак ще трябва и командния ред с него.
  • SourceTree първоначално е клиент за Mac, с наскоро налична версия за Windows. Доста приятен потребителски интерфейс (поне на OS X), поддържа повечето Hg функции, включително рафт.

Плъгини

- person mikestew; 05.11.2009

Изглежда, че PLCameraViewIrisAnimationDidEndNotification вече не получава известия в iOS5.

Не мога да разбера кое е подходящото решение, когато ирисът приключи с отварянето си, трябва да има друга опция, вместо да използвам 3-секунден таймер.

Проверете тук: https://devforums.apple.com/message/561008#561008

person markturnip    schedule 11.10.2011

Имам 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
person Andy Lister    schedule 06.10.2012

Начинът, по който реших този проблем, е, че инициализирам всички елементи със скритото свойство, зададено на ДА, след което извиквам 3-секунден забавен селектор, след като извикам камерата, където задавам всички елементи на скрити = НЕ. Това не е идеално решение, но изглежда работи и всяко забавяне след отваряне на ириса е незначително.

person Mirkules    schedule 08.04.2011

Вече трябва да знаете кога камерата е готова да направи снимка. Поне начинът, по който използвам персонализирано наслагване на камера, стартирам изгледа с нещо като self.sourceType = UIImagePickerControllerSourceTypeCamera; и другата обичайна настройка и камерата е готова (или „ирисът е отворен“) в този момент.

В обобщение, ако някой използва персонализирано наслагване на камера по начина, по който аз съм свикнал да го използвам, ще разбере кога ирисът е отворен, защото е под ваш контрол.

person mikestew    schedule 17.10.2009
comment
Това не отговаря на въпроса му. Проблемът му е, че неговото наслагване се вижда по време на анимацията на ириса и той иска да покаже нещо различно върху наслагването само след като анимацията приключи. Нямате никакъв контрол върху това колко време ще отнеме на iPhone да покаже контролера на камерата и да отвори ириса; знаете само кога сте помолили контролера на изгледа да започне този процес. - person ddoughty; 04.11.2009
comment
Отговорих, доколкото можах да го анализирам. :-) Моето наслагване прави точно това: показва се само след като анимацията е завършена. Всъщност, гледайки версията за отстраняване на грешки на моя телефон в момента, има кратък (почти неоткриваем, ако не го бях търсил) момент, когато старото наслагване се показва след анимация и преди да се покаже модифицираното наслагване. Наслагването никога не се показва върху анимацията. Ако OP иска да проследи и потвърди, че това е желаното поведение, мога да изкопая кода и да публикувам последователността, която използвам. - person mikestew; 05.11.2009
comment
Независимо от питащия, аз се интересувам от вашия код. :-) Изглежда, че намеквате, че имате две наслагвания, но къде/кога преминавате от едното към другото? Другият ми въпрос е с вашия ред self.sourceType, което предполага, че подкласирате инструмента за избор, но може би това е просто стенограма в отговора ви? Кодът, който видях и използвах, следва тази тема: a) създаване на персонализиран изглед b) създаване на инструмента за избор c) добавяне на изгледа като наслагване за инструмента за избор d) задаване на sourceType на инструмента за избор e) представяне на инструмента за избор Когато го направите че виждате ириса отворен над вашия персонализиран изглед. - person ddoughty; 05.11.2009