[英]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)對於初始動畫,只需在另一個不透明的黑色視圖下顯示初始圖像選擇器主視圖即可。 不知道用戶指定的重疊視圖是否可以使用,但是您可以在不進行子類化的情況下進行操作。
從理論上講,搜索未記錄的子視圖是另一件事,盡管這是不安全的,因為誰知道將來實現會如何變化。
可能為時已晚,但是我的建議是使用以下通知(在調試時找到)
而且用法很簡單:在第一個通知上調用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.