在UIImagePickerController中删除缩放滑块

时间:2015-07-25 23:56:55

标签: ios uiimagepickercontroller uislider

我无法访问UIImagePickerController中默认显示的缩放滑块。这似乎不可访问,我必须隐藏它,因为它弹出我的UIImagePickerController中的cameraOverlay视图。有人能告诉我如何隐藏用户捏合和“缩放”时出现的缩放滑块吗?

以下是滑块的外观:

PS 这不是我的自定义相机。这只是出现在cameraOverlay

上的滑块图片

3 个答案:

答案 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,然后通过查看视图名称单击要删除/猜测的组件:

Example hierarchy path

在这种情况下,我想删除的视图是" 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)
        }