将 UIVibrancyEffect 添加到 UIScrollview
Posted
技术标签:
【中文标题】将 UIVibrancyEffect 添加到 UIScrollview【英文标题】:Adding UIVibrancyEffect to a UIScrollview 【发布时间】:2017-01-06 14:24:11 【问题描述】:我布置了一个模糊的背景,然后是一个滚动视图,其中我放置了 UILabel 等,其中一些我想充满活力,而其中一些我想显示为白色文本。
给定静态视图,这可以正常工作,因为不需要滚动功能。但是,鉴于需要,我面临将 UILabel 放在 vibrancy.contentView(并添加活力)或滚动视图(并添加可滚动性)中的选择,但不是两者兼而有之。
编辑:
这里有一个解决方法:
UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVibrancyEffect * vibrancy = [UIVibrancyEffect effectForBlurEffect:blur];
UIVisualEffectView * vs = [[UIVisualEffectView alloc] initWithEffect:blur];
[vs setFrame:self.view.bounds];
[self.view addSubview:vs];
scroller = [UIScrollView new];
scroller.frame = CGRectMake(0, 80, w, h-80);
scroller.showsHorizontalScrollIndicator = false;
scroller.showsVerticalScrollIndicator = false;
scroller.delegate = self;
[vs addSubview:scroller];
vsv = [[UIVisualEffectView alloc] initWithEffect:vibrancy];
[scroller addSubview:vsv];
UIView * view = [UIView new]; //WITHOUT VIBRANCY
[vsv addSubview:view];
UIView * view = [UIView new]; //WITH VIBRANCY
view.frame = CGRectMake(20, yOff, w-40, 50);
[vsv.contentView addSubview:view];
vsv.frame = CGRectMake(0, 0, w, yOff); //RESIZE ALL
scroller.contentSize = CGSizeMake(w, yOff);
【问题讨论】:
【参考方案1】:您可以将您不希望充满活力的标签放入UIVisualEffectView * vs = [[UIVisualEffectView alloc] initWithEffect:blur];
的内容视图中。使用 UIVibrancyEffect 添加到视觉效果视图中的任何视图都将充满活力,而使用 UIBlurEffect 添加到视觉效果视图中的视图将显示没有活力。
【讨论】:
如果我们不需要滚动,那就可以了。如果是静态视图,我们可以将它们放在需要去的地方。问题是保持滚动和活力。 所以你有应该是模糊的静态图像和应该有活力和非活力块的可滚动内容。将模糊效果视图作为 UIScrollView 的主要内容(此视图的大小应与滚动视图的内容大小相同),而不是在将非动态块添加到滚动视图时将其添加到模糊视图,并且当您需要动态块时,您应该创建单独的块UIVisualEffectView 为每个充满活力的块带来活力。这将使您的所有块都可滚动,其中一些将具有活力效果。 是的,这是一个选项,但它包括在 scrollViewDidScroll 中添加更多方法来补偿偏移量。我将模糊保留在后面,然后添加滚动条,然后将活力视图添加到滚动条中。事实证明,您不需要将活力视图添加到 blur.contentView。 这意味着它不会是“真正的”活力,如果您需要显示考虑到背景的充满活力的视图,您应该将其添加到模糊视图中以上是关于将 UIVibrancyEffect 添加到 UIScrollview的主要内容,如果未能解决你的问题,请参考以下文章
将 UIVibrancyEffect 应用于 UITableViewCell 中的 UILabel
使用按钮将图标添加到列表并使用 Provider 状态管理主动更新 UI