在单独的类中为 FXBlurView 获取 UIView

Posted

技术标签:

【中文标题】在单独的类中为 FXBlurView 获取 UIView【英文标题】:getting UIView in separate class for FXBlurView 【发布时间】:2014-07-02 22:25:38 【问题描述】:

我正在使用 FXBlurView,但在为 blurView 设置动画时,我在顶部收到一条奇怪的黑线。

我有一个UITable,它是 ViewController 的 3/4,其余部分是一个图像。发生了什么是它只在超级视图中拾取UITable 而不是图像。那么有没有办法让superview 两者都接?还是替代品?

我已经读到这可以通过用实际的 UIView 替换 superview 来解决

FXBlurView 通过以下方式捕获其直接父视图的内容 默认。如果superview是透明的或者部分透明的, 它后面显示的内容将不会被捕获。您可以覆盖 underlyingView 属性捕获不同视图的内容 如果需要的话。

FXBlurView.m 代码是:

- (UIView *)underlyingView

    return _underlyingView ?: self.superview;


我试过这个:

((FXBlurView *)self.Genres).underlyingView = _main_view;

但这没什么区别

ImagesTableViewController 是我的主要ViewController,其中包含模糊的 Uiview 和我想要复制的 (main_view)

但这只会为 Blured Uiview 创建一个白页。

【问题讨论】:

在最后一段代码中,您所做的只是实例化一个新的ImagesTableViewController,而不是获取实际的视图控制器实例。 如何获取我的实际视图控制器实例?? @DrBeardface 你能帮忙吗? 在您的视图控制器代码中的某处(可能是viewDidLoad),将模糊视图的underlyingView 设置为您的视图控制器的main_view。您根本不必编辑 FXBlurView。 @DrBeardface 怎么样?!这是我的问题? 【参考方案1】:

首先,您根本不需要编辑 FXBlurView 源代码。

其次,我猜黑条是视图层次结构的一部分,没有被拾取。也许是导航栏?您可以尝试将模糊视图添加到窗口而不是视图中,以便获取所有内容:

[[[UIApplication sharedApplication] keyWindow] addSubview: blurView];

我能想到的唯一破解方法是制作一个使用以下窗口抓取其图像的 imageView:

- (UIImage *)screenGrab:(id) theView 

   CGRect rect = [self.view bounds];

    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [theView.layer renderInContext:context];   
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;

与:

[self screenGrab: [[UIApplication sharedApplication] keyWindow]];

然后将 imageView.image 设置为抓取的图像并将其设置为底层视图。不过你不应该这样做:)

我需要查看更多代码才能理解视图层次结构。

【讨论】:

对不起我的无知...我在哪里放置[[[UIApplication sharedApplication] keyWindow] addSubview: blurView]; 代替您已经添加模糊视图的位置。您只是将它添加到窗口而不是普通的视图层次结构。这是例如UIAlertView 被插入到应用程序中,因此您必须小心一点,但它应该为您提供整个应用程序界面。 你好,马丁。我试过第一种方法,没有运气 我可以通过电子邮件将项目发送给您,以便您更好地查看吗?

以上是关于在单独的类中为 FXBlurView 获取 UIView的主要内容,如果未能解决你的问题,请参考以下文章

在单独的类中删除带有按钮的文本框

UIButton 在单独的类中调用

OpenGL 帧缓冲函数不能在单独的类中完全工作

UITableView - 从单独的类中重新加载数据

如何在单独的类中引用我的窗口变量?

在单独的类中录制和播放语音 (Swift3)