我无法访问UIImagePickerController
中默认显示的缩放滑块。这似乎不可访问,我必须隐藏它,因为它弹出我的UIImagePickerController中的cameraOverlay
视图。有人能告诉我如何隐藏用户捏合和“缩放”时出现的缩放滑块吗?
以下是滑块的外观:
PS 这不是我的自定义相机。这只是出现在cameraOverlay
答案 0 :(得分:1)
由于iOS 10.0,我最近遇到了这个问题。花了大量时间谷歌搜索并没有提出任何有效的方法 - 我提出了自己的解决方案:
myVC.PresentViewController (_imagePicker, false, ()=>_imagePicker.View.Subviews[0].Subviews[0].Subviews[0].Subviews[0].Subviews[1].RemoveFromSuperview();
基本上一旦呈现了选择器视图 - " _imagePicker.View.Subviews [0] .Subviews [0] .Subviews [0] .Subviews [0] .Subviews 1。RemoveFromSuperview() ;"将执行以从相机中删除滑块视图。
这可能会在未来的iOS更新中中断 - 因此我不建议将其用于生产应用。如果您正在做很多自定义相机 - 建议您使用AVFoundation框架。
有人应该在iOS 10" imagePicker.ShowsCameraControls = NO;"实际上并没有删除所有相机控件。
如果你以后需要弄清楚如何做类似的事情,你可以使用:" Debug View Hierarchy" Xcode中的按钮,用于查看viewHierachy,然后通过查看视图名称单击要删除/猜测的组件:
在这种情况下,我想删除的视图是" CAMViewfinderView"。希望这有帮助!
注意,我的代码是用CSharp(Xamarin.IOS)编写的,但同样的东西在objective-c中也有用 - 只是语法略有不同。
-Rufus
答案 1 :(得分:1)
我想找到了这个问题的最佳答案: 缩放滑块是UISlider,如果您的imagePickerController视图属性在其子视图中包含UISlider,则可以将其alpha设置为零。 如果您升级到iOS10,则会出现此问题。
func subviews(_ view: UIView) -> [UIView] {
return view.subviews + view.subviews.flatMap { subviews($0) }
}
let myViews = subviews(imagePickerController.view)
for view in myViews {
if view is UISlider {
view.alpha = 0.0
}
}
我希望这会有所帮助。
答案 2 :(得分:0)
我发现这会禁用缩放功能。
imagePicker.view.isUserInteractionEnabled = false
上述内容会破坏相机的用户互动。
这最终对我有用。
将cameraOverlay作为子视图添加到选择器。
if let overlay = overlayViewController?.view {
imagePicker.view.addSubview(overlay)
}