gpt4 book ai didi

iphone - UIView 透明度显示香肠是如何制作的!

转载 作者:行者123 更新时间:2023-12-03 19:15:09 25 4
gpt4 key购买 nike

我有一个 UIView 容器,里面有两个 UIImageView,一个部分遮挡另一个(它们的组合方式如下,以允许其中一个偶尔出现动画) “层”或其他。

有时我想让这个容器的 alpha 值达到 50%,这样用户看到的内容就会变淡。问题是:将我的容器 View 设置为 50% alpha 会使我的所有 subview 也继承这一点,现在您可以通过第一个 subview 看到第二个 subview ,这在我的应用程序中具有奇怪的 X 射线效果,但我没有寻找。

当然,我所追求的是用户当前看到的内容变得 50% 透明 - 相当于将可见 View 展平为一个位图,然后将其设置为 50% alpha。

实现这一目标的最佳选择是什么?理想情况下,如果我可以帮助的话,希望避免实际上动态地展平 View ,但也欢迎最佳实践。我错过了一些明显的东西吗?由于大多数 View 都有 subview 并且会遇到这个问题,我觉得这里有一些明显的解决方案。

谢谢!

编辑:感谢大家的想法。我只是将一张图像移动到另一张图像的顶部,它仅部分遮挡了另一张图像。有时,这对图像也必须一起移动。有时我想淡出整个图像,无论它在哪里,也无论图像对目前的状态如何。稍后,我想把它带回来并继续制作动画。

拍摄容器的快照,无论是通过渲染其图层(?)还是在对整个事物进行 alpha 处理之前即时进行其他一些离屏合成,这绝对是可能的,而且我知道有几种方法可以做吧。但是,如果动画在整个 alpha 值达到 50% 时继续发生怎么办?

听起来我正在尝试做的事情没有明显的解决方案,这对我来说似乎很奇怪,但谢谢大家的意见。

最佳答案

最近我遇到了同样的问题,我需要以全局透明度对内容层进行动画处理。由于我的动画非常复杂,我发现扁平化 UIView 层次结构会导致动画不稳定。

我发现的解决方案是使用 CALayers 而不是 UIViews,并将容器层中的 .shouldRasterize 属性设置为 YES,以便任何子图层都会在之前自动展平应用不透明度。

UIView 可能如下所示:

#import <QuartzCore/QuartzCore.h>   //< Needed to use CALayers

...

@interface MyView : UIView{
CALayer *layer1;
CALayer *layer2;
CALayer *compositingLayer; //< Layer where compositing happens.
}

...

- (void)initialization
{
UIImage *im1 = [UIImage imageNamed:@"image1.png"];
UIImage *im2 = [UIImage imageNamed:@"image2.png"];

/***** Setup the layers *****/
layer1 = [CALayer layer];
layer1.contents = im1.CGImage;
layer1.bounds = CGRectMake(0, 0, im1.size.width, im1.size.height);
layer1.position = CGPointMake(100, 100);

layer2 = [CALayer layer];
layer2.contents = im2.CGImage;
layer2.bounds = CGRectMake(0, 0, im2.size.width, im2.size.height);
layer2.position = CGPointMake(300, 300);

compositingLayer = [CALayer layer];
compositingLayer.shouldRasterize = YES; //< Here we turn this into a compositing layer.
compositingLayer.frame = self.bounds;

/***** Create the layer three *****/
[compositingLayer addSublayer:layer1]; //< Add first, so it's in back.
[compositingLayer addSublayer:layer2]; //< Add second, so it's in front.

// Don't mess with the UIView's layer, it's picky; just add sublayers to it.
[self.layer addSublayer:compositingLayer];
}

- (IBAction)animate:(id)sender
{
/* Since we're using CALayers, we can use implicit animation
* to move and change the opacity.
* Layer2 is over Layer1, the compositing is partially transparent.
*/
layer1.position = CGPointMake(200, 200);
layer2.position = CGPointMake(200, 200);
compositingLayer.opacity = 0.5;
}

关于iphone - UIView 透明度显示香肠是如何制作的!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com