簡體   English   中英

在UIImagePickerController中隱藏快門

[英]Hide Shutter in UIImagePickerController

我已經為iPhone應用程序中的相機視圖設計了虹膜快門動畫。

不幸的是,即使我隱藏了相機控件並創建了一個自定義的cameraOverlayView,在顯示視圖時也無法隱藏Apple的快門。

通過使用UIImagePickerController的viewWillAppear和viewDidAppear方法在視圖出現時將快門設置在普通快門上方,可以解決此問題。 但是,我無法讓快門第一次被隱藏在快門之下。 應用啟動時,它會顯示相機視圖,並且可以看到原始快門。 在cameraController的所有后續視圖上,我的解決方法都可以工作。 有什么建議么?

這是我的代碼。 這來自我的應用程序委托:

- (void)applicationDidFinishLaunching:(UIApplication *)application {   

  cameraController = [[CameraController alloc] initWithMode:@"camera"];
  [window addSubview:cameraController.view];

}

這來自我的UIImagePickerController子類:

- (void) viewWillAppear:(BOOL)animated {

  if (self.sourceType != UIImagePickerControllerSourceTypePhotoLibrary || simulatorView) {
    [self addShutter];
    [shutter close];
  }   
  [super viewWillAppear:animated];

}


- (void) viewDidAppear:(BOOL)animated {

  if (self.sourceType != UIImagePickerControllerSourceTypePhotoLibrary || simulatorView) {
    [shutter openShutter:.5f];
  }
  [super viewDidAppear:animated];

}

請注意,文檔說不支持對UIImagePickerController的子類化,因此在某些情況下它可以工作,但並不“安全”。 不知道它是否會被應用商店拒絕。 (可能取決於他們的靜態代碼驗證工具有多挑剔。)

我的回答不是很好,但是您可以嘗試以下兩種方法之一:在選擇器主視圖的子視圖上進行迭代,以查看是否可以識別出用於動畫快門的內容,然后對其進行處理以使其不會顯示,或2)對於初始動畫,只需在另一個不透明的黑色視圖下顯示初始圖像選擇器主視圖即可。 不知道用戶指定的重疊視圖是否可以使用,但是您可以在不進行子類化的情況下進行操作。

從理論上講,搜索未記錄的子視圖是另一件事,盡管這是不安全的,因為誰知道將來實現會如何變化。

可能為時已晚,但是我的建議是使用以下通知(在調試時找到)

  1. PLCameraControllerAvailable-相機控制器對象已啟動,但尚不可見快門
  2. PLCameraViewIrisAnimationDidEndNotification-虹膜動畫已完成。

而且用法很簡單:在第一個通知上調用UIGetScreenImage(),在UIImagePicker上方的屏幕(全屏)上渲染抓取的圖像。 銷毀第二個通知上的渲染圖像。

我嘗試同樣的事情但沒有結果,所以我執行以下解決方法:

1-假設您有一個名為showAllButtons的方法,該方法沒有任何參數,它將顯示所有自定義內容(按鈕,工具欄等)。2-初始化所有隱藏的自定義控件; 3-編寫一個將調用最后一個函數但位於內部的方法。間隔:

-(void)showAllButtonsDelayed:(NSTimeInterval)a_iMsToDelay
{
    NSTimer* tmpShowButtonsTimer = [NSTimer timerWithTimeInterval:a_iMsToDelay target:self selector:@selector(showAllButtons) userInfo:nil repeats:NO];
    [[NSRunLoop currentRunLoop] addTimer:tmpShowButtonsTimer forMode:NSDefaultRunLoopMode];
}

4-在UIImagePickerController子類的willDidAppear方法中調用該方法。 播放一些a_iMsToDelay值。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM