为自定义活动指示器视图使 UIView 半透明

Posted

技术标签:

【中文标题】为自定义活动指示器视图使 UIView 半透明【英文标题】:Make UIView translucent for custom activity indicator view 【发布时间】:2014-06-10 06:06:30 【问题描述】:

我已经为我的 ios 应用程序实现了一个自定义活动指示器视图,它运行流畅。要求是在自定义活动指示器动画时将superview的alpha设置为50%(或使其半透明),并在自定义活动指示器停止时将其设置为正常。我正在使用以下类方法添加自定义活动指示器以查看。

+ (CustomActivityIndicatorView*)addCustomActivityIndicatorToView:(UIView *)view

    CustomActivityIndicatorView *customActivityIndicatorView = [[CustomActivityIndicatorView alloc]init];
    customActivityIndicatorView.hidesWhenStopsAnimating = NO;
    [customActivityIndicatorView setFrame:CGRectMake(view.bounds.size.width/2-(customActivityIndicatorView.frame.size.width/2), view.bounds.size.height/2-(customActivityIndicatorView.frame.size.height/2), customActivityIndicatorView.frame.size.width, customActivityIndicatorView.frame.size.height)];
    [view addSubview:customActivityIndicatorView];
    [customActivityIndicatorView startAnimating];

    return customActivityIndicatorView;

问题是,当我设置 [view setAlpha:0.5] 时,它会将 alpha 设置为所有子视图,包括自定义活动指示器。 我想淡化超级视图而不是自定义活动指示器。

阅读所有这些链接;

https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

UIView group opacity in single view heirachy

iOS controlling UIView alpha behaviour for subviews

还尝试为组不透明度设置 layer.shouldRasterize 和 plist 键,但没有任何帮助。 请帮忙!

【问题讨论】:

【参考方案1】:

您可以在超级视图和指示器之间放置一个半白色或半黑色的叠加层,而不是淡化整个超级视图。这将在视觉上起到作用。

叠加层将具有 alpha = 1.backgroundColor = [UIColor colorWithWhite:1. alpha:.5]

【讨论】:

是的,尝试这样做并且它可以工作,但它会禁用用户交互......其中要求指出用户可以在 customActivityIndi​​catorView 旋转时与视图交互。谢谢 覆盖不需要阻止用户交互。只需将其 userInteractionEnabled 属性设置为 NO。【参考方案2】:

只需将视图的背景颜色设置为半透明的白色即可:

customActivityIndicatorView.backgroundColor = [UIColor colorWithWhite:1. alpha:.5];

【讨论】:

谢谢,但我希望超级视图(customActivityIndi​​catorView 添加为子视图)是半透明的,而不是 customActivityIndi​​catorView 的背景。

以上是关于为自定义活动指示器视图使 UIView 半透明的主要内容,如果未能解决你的问题,请参考以下文章

半透明指示器

呈现一个模态视图控制器,但不要隐藏导航栏

阻止用户与底层视图的交互

如何在 UIScrollView 的滚动指示器下方放置非滚动 UIView?

带有半透明导航栏的滚动条

搜索视图控制器推送 VC 时,活动指示器不会出现在自定义 UIAlertView 的中心