在单独的类中为 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的主要内容,如果未能解决你的问题,请参考以下文章