自定义 UIActivity ViewController 背景图像透明度不起作用

Posted

技术标签:

【中文标题】自定义 UIActivity ViewController 背景图像透明度不起作用【英文标题】:Custom UIActivity ViewController Background Image Transparency Doesn't Work 【发布时间】:2014-10-13 08:48:58 【问题描述】:
 - (UIViewController *)activityViewController

我创建了一个自定义 UIACtivity,它返回一个显示弹出窗口的视图控制器。这允许用户在执行实际活动之前进行一些编辑。

使用低于 8 的 ios,我的背景具有看起来像叠加层的透明度(我可以在下面看到我的游戏),但在更新到 ios8 后,背景变为纯灰色。我检查了 UIImageView 显示我的覆盖图像与 alpha 并设置为清除。谁能告诉我为什么背景突然变得坚实?我再也看不到下面的游戏视图了。

这是我的代码:

- (IBAction)didPressShareButton:(id)sender

    ...
    [_rootViewController presentViewController:[self getActivityViewController] animated:YES completion:nil];
    ...

_rootViewController 是我的应用程序的主视图控制器。 [self getActivityViewController] 返回一个 UIActivityViewController 实例,其中包括我为 instagram 定制的 UIActivity

我的 InstagramUIActivity 覆盖此函数以返回自定义视图控制器(见附图)

- (UIViewController *)activityViewController

    dismissalAC = [[InstagramDismissal alloc]init];
    presentationAC = [[InstagramPresentation alloc]init];

    instagramVC = [[InstagramViewController alloc]initWithInstagramPhoto:_instagramPhoto];
    instagramVC.delegate = self;
    if ([instagramVC respondsToSelector:@selector(setTransitioningDelegate:)]) 
        instagramVC.transitioningDelegate = self;
    

    return instagramVC;

dismissalAC 和presentationAC 只是实现UIViewControllerAnimatedTransitioning 协议的对象,因此我可以拥有自己的过渡动画。

当我返回我的自定义视图控制器时,它会弹出,但随之而来的是一个白色背景的视图。我不知道为什么。

【问题讨论】:

【参考方案1】:

试试

instagramVC.modalPresentationStyle = UIModalPresentationOverFullScreen;

instagramVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;

【讨论】:

【参考方案2】:

我的应用中也遇到了这个问题。

从 iOS 8 开始,Apple 禁止子类化或自定义 UIActivityViewController 的子视图。

如果您在您的应用上这样做,该应用会在您的视图上显示一个叠加层和一个没有任何按钮的空灰列表。在这种情况下,您必须终止您的应用程序才能关闭 UIActivityViewController

要替换此行为,我只需创建一个具有相同布局的视图(以编程方式或从情节提要),您可以使其从屏幕底部显示(带有动画)。如果需要,请向我询问一些示例代码。

【讨论】:

嗨。感谢您的回复,但我的问题是我的 UIActivity 返回的自定义视图控制器。我没有使用 performActivity,而是返回了我的自定义视图控制器。我遇到了问题,因为它添加了白色背景。糟透了! >. 你能张贴你得到的截图吗?您是否尝试在调试器中覆盖 willLayoutSubviews 以检查子视图并在运行时将其删除?或者您是否尝试过 iOS 8 的新功能“Debug View Hierarchy”,它在布局调试时可能会很有用? 嗨。我附上了我得到的截图。灰色应该是叠加层。这是一个具有透明度的灰色图像。当我试图删除它时,它下面有一个白色背景。但我确信视图控制器的背景很清楚。我不知道是什么添加了白色背景。使用 ios8 以下的设备可以正常工作。只有 ios8 这样做。 在这种情况下我肯定会使用“Debug View Hierarchy”...您将能够选择灰色的不透明层,或者查看您的视图是否符合条件。如果您的图像只是带有透明度的灰色,也许您可​​以尝试将其替换为具有与您的图像相对应的背景颜色和 alpha 的标准 UIView 嗨。我尝试使用调试层次结构,父级是 uitransitionview。可以访问吗?我附上了层次结构的屏幕截图

以上是关于自定义 UIActivity ViewController 背景图像透明度不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 UIActivityViewController 以仅包含自定义 UIActivity 类型?

自定义 UIActivity 的主题

UIActivity 自定义 activityViewController 在 iPad 上崩溃

自定义 UIActivity :图像图标反转颜色

自定义 UIActivity:ios8 中提供的未知活动项

iOS 8 自定义 UIActivity 图片黑色背景色