gpt4 book ai didi

iPhone 按钮不是矩形的?

转载 作者:行者123 更新时间:2023-12-03 18:49:35 25 4
gpt4 key购买 nike

如何获得非矩形按钮?

例如,我有一个具有 alpha 透明度的 PNG 图像。如何在没有透明颜色的情况下将按钮的形状设置为该图像。

最佳答案

就像其他人说的那样,您应该有一个合理的表面来注册触摸事件,但我相信您知道这一点并且有自己的理由,所以我只会告诉您我是如何做到的:

不久前我需要这样做,我所做的就是 Sixten Otto 刚刚建议的。我原来的问题(“更新”部分)中有一些提示,用于获取图像在某个点的 alpha 值:

How to create a transparent window with non-rectangular buttons?

编辑:我建议在下面的示例中对 UIControl 进行子类化,但如果您的按钮除了“非矩形”之外不需要任何特殊行为,那么只需对无边框 UIButton 集进行子类化即可与你的 PNG 一起完成这项工作并且需要更少的工作。通过子类化 UIControl 并以“困难的方式”进行操作,您可以更好地控制控件的行为。

我建议您子类化 UIControl 并重写触摸事件方法,然后检查点击点下的 alpha,如果 alpha == 0 则不处理该事件。对于绘图,您重写 drawRect: 并使用 NSImagedrawInRect:fromRec:operation:fraction: 方法在其中绘制图像控件的框架。

首先,您需要加载图像并获取其位图表示形式:

buttonImage = [NSImage imageNamed:@"myButtonImage"];
buttonImageRep = [[buttonImage representations] objectAtIndex:0];

然后您可以将其绘制到控件的 View 中:(其中 stateImage 是指向图像的指针,必须根据是否按下按钮来绘制该图像)

- (void)drawRect:(NSRect)aRect {
[stateImage drawInRect:[self bounds] fromRect:NSMakeRect(0.0,0.0,[buttonImage size].width,[buttonImage size].height)
operation:NSCompositeSourceOver fraction:1.0];
}

此时,您已经用 png 图像绘制了按钮。如果 alpha 不为 0,您可以重写触摸事件方法并处理该事件:

NSColor *colorUnderMouse = [buttonImageRep colorAtX:mouse.x y:mouse.y];
float alpha = [colorUnderMouse alphaComponent];

这就是我所做的,效果非常好。希望这有帮助!

注意:我的示例适用于 Mac,但它也应该适用于 iPhone,也许需要一些细微的修改。

关于iPhone 按钮不是矩形的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561585/

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