将形状从 UIView 复制到另一个 UIView

Posted

技术标签:

【中文标题】将形状从 UIView 复制到另一个 UIView【英文标题】:Copy the shape from a UIView to an other UIView 【发布时间】:2012-12-01 08:22:41 【问题描述】:

我有一个自定义形状的 UIView(见图),我想有时用黑色调暗那个视图。然而,仅仅拉低 alpha 对我来说不起作用,因为它使用了 dim 它。

所以我想在视图中添加一个具有相同形状的子视图,并使用 alpha 使该视图变暗,因此它看起来像较低的气泡(见图)。如何复制视图的形状,是否需要再次对其进行子类化或有更简单的方法?

【问题讨论】:

你是如何绘制形状的?它是图像视图中的图像吗?你画在drawRect:吗?你用CAShapeLayer吗? 它是一个 UIView,我在 drawRect: 使用 CGContext 绘制它... 【参考方案1】:

您正在drawRect: 中绘制形状。因此,只需用较深的颜色绘制它。为您的视图提供dimmed 属性,例如

@property (nonatomic) BOOL dimmed;

像这样覆盖设置器:

- (void)setDimmed:(BOOL)dimmed 
    if (dimmed != _dimmed) 
        _dimmed = dimmed;
        [self setNeedsDisplay];
    

然后检查drawRect:中的属性。如果已设置,请使用较深的颜色。否则,请使用较浅的颜色。

【讨论】:

但是,它在黄色背景上设置的颜色较深。 40% 黑色 (0,0,0) 的 alpha 应适用于气泡视图及其所有内容(例如红色文本)。您的建议只会将背景更改为其他所需的颜色。 为什么不能也改变文字颜色?【参考方案2】:

如果您不需要使用大量自定义创建的 UIView 来执行此操作,那么我能说的最简单的方法是将该形状放入 Photoshop 之类的图像编辑器中,用黑色填充它,使其透明度约为30-40% 并将其覆盖在目标视图上。

【讨论】:

好的,感谢您的建议,但不幸的是,这不是我的选择。视图在不同时间以不同大小重复使用。 我想不同的尺寸是指你从它的上 - 矩形和下 - 箭头部分组成这个视图,其中箭头总是相同的大小?如果您将该视图子类化,您仍然可以通过为矩形和箭头创建两个暗淡的图像来坚持这种方法 箭头在不同时间的反应不同。还有不同的大小,地方等。我更喜欢程序化的方式。【参考方案3】:

最后我通过在现有 UIView 上绘制一个新的 UIView 并赋予它 40% 的黑色来解决它。 因为我画了一次视图,所以我可以再画一次。

【讨论】:

以上是关于将形状从 UIView 复制到另一个 UIView的主要内容,如果未能解决你的问题,请参考以下文章

将 UIGestureRecognizer 的所有事件从一个 UIView 传递到另一个 UIView(子视图)[重复]

通过 UINavigationController 将整个 UIView 从一个 ViewController 传递到另一个

将 UIView 从一个选项卡移动到另一个选项卡

使用自动布局时如何将动画从一个 UIView 翻转到另一个?

从一个 UIView 到另一个 UIView 的平滑过渡

UIView 发出与边框形状匹配的环