0

我試圖在UITabBarController中實現imagepickercontroller。到目前爲止,一切都很好....TabBarController中的UIImagePickerController

在我的ViewController,在那裏我開始imagePickerController,然後將我的TabBarViewController的TabBar陣列,我實現了「的loadView」方法:

- (void)loadView{ 
    self.arController = [[IFAugmentRealityController alloc] initWithViewController:self]; 
    [self showCamera]; 
    [self initOverlayController]; 
    self.picker.delegate = self; 
    [self.view addSubview:self.picker.view]; 

} 

- (void)initOverlayController { 
    overlay = [[IFAROverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)]; 
    overlay.delegate = self;  
} 

- (void)showCamera { 
    self.picker = [[UIImagePickerController alloc] init]; 
    self.picker.navigationBarHidden = YES; 
    self.picker.toolbarHidden = YES; 
    self.picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    self.picker.showsCameraControls = NO; 
    self.picker.cameraViewTransform = CGAffineTransformScale(self.picker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y); 
    self.picker.cameraOverlayView = overlay; 
} 

但是當我運行該應用似乎在loadView方法中創建了一個inifite循環,而tabbar不再反應。我錯過了什麼嗎?

我不希望ImagePickerController是全屏幕,並用「presentviewcontroller」方法推送,但作爲其中一個選項卡加載爲「普通」視圖。

所以我的問題是:

1)應我寧願用 「viewDidLoad中」,而不是 「的loadView」?因爲有viewdidload它似乎工作

2)但是,當使用viewdidload我無法修復應該顯示imagepicker的框架。視頻屏幕下方和tabBar上方總是有一個黑條。

非常感謝!

+1

我認爲當你在'self.view = [[UIView alloc] initWithFrame:someFrame]設置視圖本身之前發送'-addSubview'消息到'self.view'時,會出現無限循環;''因爲在技術上,在'loadView'中,你應該設置視圖控制器的視圖。如果'self.view'爲'nil',並且您嘗試發送消息,則再次調用'-loadView'。 – Hyperbole 2013-02-21 18:57:09

+0

但不是已經在「showCamera」方法中初始化的視圖,它是在添加子視圖之前在「loadView」中加載的? – konturgestaltung 2013-02-21 18:59:34

+0

是的!現在我懂了!剛剛用UIView拳頭初始化self.view ...完美地解決了我的問題!謝謝 – konturgestaltung 2013-02-21 19:03:52

回答

1

我覺得無限循環進來,當你設置視圖本身的東西,如self.view = [[UIView alloc] initWithFrame:someFrame];之前發送-addSubview消息self.view因爲,在技術上,而在loadView你應該要設置視圖控制器的看法。

如果self.viewnil並且您嘗試發送消息,則會再次調用-loadView,從而導致無限循環。