How to know if the "iris" start animation of a UIImagePickerController is over? -


hey guys... need here...really cant find in google...

i have tabbed app, in 1 of thos tabs show uiimagepickercontroller picture camera... use overlay view, when camera take 3 seconds "open" "irs" (starting animation), overlay view visible, on closed iris!!!

i need check how test if iris still close, can hidde overlay view.

i read posts subclassing uiimagepickercontroller, apple said should not wifh uiimagepickercontroller....

any 1 has clue? lost here....

thx

the iris animation fires on [uiimagepickercontroller viewdidappear] method. apple discourages subclassing uiimagepickercontroller variety of reasons, if need add overlay after iris animation finishes , not willing write own image capture class avfoundation, this:

if don't have one, add new subclass of uitabbarviewcontroller uiimagepickercontroller @property , delegates uiimagepickercontrollerdelegate , uinavigationcontrollerdelegate

@interface my_tabbarviewcontroller : uitabbarcontroller <uiimagepickercontrollerdelegate, uinavigationcontrollerdelegate> @property (nonatomic, strong) uiimagepickercontroller *picker; 

in implementation, add initcamera method , call in viewdidload

- (void)initcamera {    _picker                     = [[uiimagepickercontroller alloc] init];   _picker.sourcetype          = uiimagepickercontrollersourcetypecamera;   _picker.view.frame          = cgrectmake(0.f, 20.f, 320.f, 499.f);   _picker.navigationbarhidden = true;   _picker.delegate            = self;   _picker.cameraoverlayview   = yourcameraoverlayview;   [self.view addsubview:_picker.view];   [_picker viewdidappear:false];    [self.view sendsubviewtoback:_picker.view];  } 

then when camera view tab bar item tapped, show camera method on tab bar controller:

- (void)tabbar:(uitabbar *)tabbar didselectitem:(uitabbaritem *)item {   nslog(@"tapped: %@", item.title);    if ([item.title isequaltostring:@"camera"]) {     [self.view bringsubviewtofront:_picker.view];   } else {     [self.view sendsubviewtoback:_picker.view];   } } 

finally, in uiimagepickercontroller delegate method on tab bar controller, clean image picker, , send info dictionary camera view controller handle image need to:

- (void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingmediawithinfo:(nsdictionary *)info {   [_picker.view removefromsuperview];    yourcameraviewcontroller *camvc = (yourcameraviewcontroller*)[self.viewcontrollers objectatindex:1];   // index 1 second tab, adjust accordingly   [camvc imagepickercontroller:picker didfinishpickingmediawithinfo:info];    [self initcamera]; } 

the call [self initcamera]; here re-initialize uiimagepickercontroller may or may not want here. #import "my_tabbarviewcontroller.h in yourcameraviewcontroller , grab pointer picker in uiimagepickercontroller delegate method calling:

my_tabbarviewcontroller *tabbarvc = (my_tabbarviewcontroller*)self.tabbarcontroller; 

and have yourcameraviewcontroller dismiss , message tabbarvc re-init uiimagepickercontroller when need again.


Comments