加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iPhone按钮非矩形形状?

发布时间:2020-12-14 19:35:37 所属栏目:百科 来源:网络整理
导读:如何获得非矩形按钮? 例如,我有一个带alpha透明度的PNG图像. 如何在没有透明色的情况下将按钮的形状设置为此图像. 解决方法 就像其他人说你应该有一个合理的表面来注册触摸事件,但我相信你知道并且有你的理由所以我只会告诉你我是如何做到的: 我不久前需要
如何获得非矩形按钮?

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

解决方法

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

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

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

编辑:我建议在下面的例子中继承UIControl,但是如果除了它的“非矩形”之外你的按钮上不需要任何特殊的行为,那么只需用你的PNG创建无边框UIButton就能完成这项工作并要求减少工作量.通过对UIControl进行子类化并以“艰难的方式”进行操作,您可以更好地控制控件的行为.

我建议你继承UIControl并覆盖触摸事件方法,然后在tapped点下检查alpha并且如果alpha == 0则不处理事件.对于绘制你覆盖drawRect:并使用NSImage的drawInRect:fromRec:operation:fraction :在那里绘制控件框架中的图像的方法.

首先,您需要加载图像并获取它的位图表示:

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

然后你可以将它绘制到控件的视图中:(其中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];

这就是我所做的,它运作得非常好.希望这可以帮助!

N.B:我的例子是针对Mac的,但它也适用于iPhone,可能稍作修改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读