Objective c 将形状从UIView复制到其他UIView

Objective c 将形状从UIView复制到其他UIView,objective-c,cocoa-touch,uiview,alpha,Objective C,Cocoa Touch,Uiview,Alpha,我有一个自定义形状的UIView(见图),我想用黑色调暗该视图。然而,仅仅拉低alpha值对我来说不起作用,因为它会变暗 因此,我考虑在视图中添加一个子视图,使其具有相同的形状,并使用alpha使该视图变暗,使其看起来像下方的气泡(见图)。如何复制视图的形状,是否需要再次对其进行子类化,或者是否有更简单的方法 如果您不需要使用大量自定义创建的UIView进行此操作,那么我能告诉您的最简单方法是将该形状放入Photoshop之类的图像编辑器中,用黑色填充,将其透明度设置为30-40%左右,并将其覆

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

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


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

您在
drawRect:
中绘制该形状。所以只需用较深的颜色来画它。为视图提供一个暗显的
属性,例如

@property (nonatomic) BOOL dimmed;
如下所示覆盖setter:

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

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

最后,我解决了这个问题,在现有UIView的基础上绘制了一个新的UIView,并给它40%的黑色。
因为我画过一次视图,所以我可以再画一次

好的,谢谢你的建议,但不幸的是,这不是我的选择。视图在不同的时间以不同的大小重复使用。我想,不同的大小意味着您可以从上下箭头部分组成此视图,其中箭头的大小始终相同?如果您对该视图进行了子类化,您仍然可以通过为rect和箭头创建两个暗显图像来坚持这种方法箭头在不同时间的反应不同。还有不同的尺寸、位置等。我更喜欢编程的方式。你是怎么画形状的?它是图像视图中的图像吗?您是否在
drawRect:
中绘制它?您是否使用
CAShapeLayer
?这是一个UIView,我使用
CGContext
drawRect:
中绘制它……但是,它在黄色背景上设置的颜色越深。40%黑色(0,0,0)的alpha应适用于气泡视图及其所有内容(例如红色文本)。您的建议只会将背景更改为其他所需的颜色。为什么不能同时更改文本颜色?