带有视觉跟踪弹出视图的 UISlider。隐藏在其他视图元素后面的弹出窗口

Posted

技术标签:

【中文标题】带有视觉跟踪弹出视图的 UISlider。隐藏在其他视图元素后面的弹出窗口【英文标题】:UISlider with visual tracking popup view. Popup hidden behind other view elements 【发布时间】:2014-06-17 19:51:41 【问题描述】:

我一直在(成功地)遵循以下教程,了解如何构建一个绘制视觉跟踪弹出视图的 UISlider 子类。

http://blog.neuwert-media.com/2011/04/customized-uislider-with-visual-value-tracking/

我的最后一个问题是弹出视图被其他视图 imageView 元素隐藏。我一直在寻找某种显示顺序或偏好设置,但没有运气坚持在图像上方显示我的弹出视图。

【问题讨论】:

【参考方案1】:

试试这个SO Answer:

[parentView bringSubviewToFront:[[parentView subviews] objectAtIndex:0]];
// or
[parentView bringSubviewToFront:popupView];

【讨论】:

【参考方案2】:

我建议将弹出框作为子视图添加到应用程序的 keyWindow 中,使其高于一切。这可能是用户的预期行为。比如:

- (void)setPopoverVisible:(BOOL)visible 
    if (visible) 
        [self.popover removeFromSuperview];
        UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
        [keyWindow addSubview:self.popover];
    
    [UIView animateWithDuration:0.15
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut
                     animations:^
                         self.popover.alpha = (visible ? 1 : 0);
                     
                     completion:^(BOOL finished) 
                         if (!visible) 
                             [self.popover removeFromSuperview];
                         
                     ];

请记住,在定位弹出框以将矩形或点(用于定位滑块的任何内容)转换为 keyWindow 的边界时。例如:

- (void)positionPopover 
    // Calculate newPopoverCenter in self.bounds
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    self.popover.center = [self convertPoint:newPopoverCenter toView:keyWindow];

【讨论】:

【参考方案3】:

可以在此处找到更现代的方法:https://github.com/alskipp/ASValueTrackingSlider。也许它会解决你遇到的问题。

【讨论】:

以上是关于带有视觉跟踪弹出视图的 UISlider。隐藏在其他视图元素后面的弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

隐藏视图时如何禁用 UISlider 交互?

UISlider布局忽略宽度

将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域

带有渐变层的 iOS UISLider

带有 UISlider 的 VC 更改 VC2 上的文本字段

UISlider 进展不顺利