如何在给定图像的形状中创建UIButton。
我可以创建贴近它的东西,但图像似乎不适合按钮。 我的要求是下面给出的图像.i.e;半圆
我用来创建按钮的代码如下所示。
我应该对下面的图像进行哪些更改才能获得此按钮。 ps-add子视图在另一个类中完成..
btnStartGame =[UIButton buttonWithType:UIButtonTypeCustom];
[btnStartGame setFrame:CGRectMake(60, 200, 200, 200)];
btnStartGame.titleLabel.font=[UIFont fontWithName:@"Helvetica-Bold" size:30];
[btnStartGame setImage:
[UIImage imageNamed:@"Draw button.png"] forState:UIControlStateNormal];
btnStartGame.titleLabel.textColor=[UIColor redColor];
btnStartGame.clipsToBounds = YES;
btnStartGame.layer.cornerRadius = 50;//half of the width
btnStartGame.layer.borderColor=[UIColor redColor].CGColor;
btnStartGame.layer.borderWidth=2.0f;
btnStartGame.tag=20;
btnStartGame.highlighted=NO;
答案 0 :(得分:2)
这里有一个非常棒的教程,可下载的源代码:
http://iphonedevelopment.blogspot.co.uk/2010/03/irregularly-shaped-uibuttons.html
本质上你需要在UIImage上创建一个类别,它检查你触摸的点是否是透明图像。这意味着您可以使用它来检查不规则形状的命中测试。
然后你继承UIButton并覆盖hitTest:withEvent:
希望这有帮助
答案 1 :(得分:1)
尽管Jeff Lamarche通过其他答案链接的解决方案运行良好,但它使用了大量内存,并且/或者做了大量工作:
NSData
一次,则最终会在每个按钮的生命周期内保留一个相对较大的内存块事实证明,通过遵循this answer中概述的方法,您可以在内存使用和CPU消耗方面更有效地完成此任务。
子类UIButton
,并覆盖其pointInside:withEvent:
方法,如下所示:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
if (![super pointInside:point withEvent:event]) {
return NO;
}
unsigned char pixel[1] = { 0 };
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 1, NULL, (CGBitmapInfo)kCGImageAlphaOnly);
UIGraphicsPushContext(context);
UIImage *image = [self backgroundImageForState:UIControlStateNormal] ;
[image drawAtPoint:CGPointMake(-point.x, -point.y)];
UIGraphicsPopContext();
CGContextRelease(context);
return pixel[0] != 0;
}
上面的代码从按钮的背景图像中获取alpha。如果您的按钮使用其他图片,请更改初始化image
变量的行。