2014-03-04 37 views
1

當用戶登陸頁面時,我有一個UIImagePickerController類型的相機。我在UIImagePickerController之上放置了一個自定義攝像頭覆蓋圖,但沒有任何按鈕事件正在觸發。我知道大部分代碼都來自基本的Apple代碼,所以我對發生的事情感到困惑。UIImagePickerController Overlay Buttons Not Firing

@interface TakePhotoViewController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> 
... 

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType 
{ 
if (self.capturedImages.count > 0) 
{ 
    [self.capturedImages removeAllObjects]; 
} 

self.sourceType = sourceType; 
self.delegate = self; 

if (sourceType == UIImagePickerControllerSourceTypeCamera) 
{ 
    /* 
    The user wants to use the camera interface. Set up our custom overlay view for the camera. 
    */ 
    self.showsCameraControls = NO; 

    /* 
    Load the overlay view from the OverlayView nib file. Self is the File's Owner for the nib file, so the overlayView outlet is set to the main view in the nib. Pass that view to the image picker controller to use as its overlay view, and set self's reference to the view to nil. 
    */ 
    [[NSBundle mainBundle] loadNibNamed:@"CameraOverlay" owner:self options:nil]; 
    float scale = [self getScaleForFullScreen]; 
    self.cameraViewTransform = CGAffineTransformMakeScale(scale, scale); 
    self.overlayView.frame = self.cameraOverlayView.frame; 
    self.cameraOverlayView = self.overlayView; 
    self.overlayView = nil; 
} 

}

的CameraOverlay的所有者是TakePhotoViewController。 CameraOverlay內的一個按鈕將Touch Up Inside事件發送到下面列出的插座功能。附加到按鈕在TakePhotoViewController的代碼如下,其中無日誌擊發:

- (IBAction)outlet:(id)sender { 
NSLog(@"outlet"); 
} 
+1

將按鈕掛鉤到此目標和此操作方法的代碼在哪裏? – matt

+0

我有控制按鈕從CameraOverlay拖動到此操作方法。在插座方法的旁邊填入圓圈,它說「CameraOverlay.xib - 插座按鈕測試」 –

+0

不過,我很懷疑。畢竟,你自己說過'outlet'方法沒有被觸發。我強烈建議你在代碼中形成這個動作連接 - 就在你說'self.cameraOverlayView = self.overlayView;'之後,在按鈕上調用'addTarget:action:forControlEvents:'來形成連接。 – matt

回答

4

問題是這樣的線:

self.overlayView.frame = self.cameraOverlayView.frame; 

我們cameraOverlayView是零;它沒有框架,因爲它還沒有存在。所以我們給overlayView一個零框架。它是無量綱的。該按鈕出現,但它具有零大小的超級視圖,因此無法點擊。

現在,你可能會問,爲什麼?這是因爲觸摸傳送在iOS中的作用方式。爲了可觸摸,子視圖的超級視圖也必須是可觸摸的,因爲超級視圖在子視圖之前經過觸摸測試。但零大小的視圖不可觸摸:您的觸摸錯過了overlayView,所以它也錯過了按鈕。

解決方案可能很簡單,只要給overlayView一個合理的實際框架即可。有可能當你做到這一點時間問題(例如,它可能是你不能真正設置幀,直到圖像選擇器即將出現 - viewWillAppear:),但在任何情況下,這是開始的地方。