Custom UIButton Shape without using an image(不使用图像的自定义 UIButton 形状)
问题描述
我想制作一个看起来类似于 UIBackBarButtonItem 的 UIButton(箭头指向左侧的导航堆栈.如果可能的话,我宁愿这样做而不必使用图像,因为按钮的大小会有所不同,具体取决于在手机的方向上.
I want to make a UIButton with that looks similar to the UIBackBarButtonItem (with an arrow pointing left for the navigation stack. I would prefer to do this without having to use an image if possible because the button will have a different size depending on the phone's orientation.
有没有办法在代码中激活这种影响?我的想法是以某种方式使用按钮的 CALayer.
Is there a way to active this affect in code? My idea was using the CALayer of the button somehow.
谢谢!
编辑
我正在尝试使用@Deepak 的建议,但遇到了问题.我希望按钮的右侧看起来像 [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4] 左侧看起来像箭头.我尝试使用 addQuadCurveToPoint:controlPoint 方法来做到这一点.
I am trying to use @Deepak's advice, but I am running into a a problem. I want the right side of the button to look like a [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4] with the left side looking like an arrow. I tried to do this using the addQuadCurveToPoint:controlPoint method.
我使用矩形的角作为控制点,但路径没有像我预期的那样弯曲.它仍然像我只使用 addLineToPoint: 方法一样走投无路.我的代码如下.
I am using the corner of the rect as the control point, but the path does not curve like I expect. It is still cornered as if I only used the addLineToPoint: method. My code is below.
float radius = 4.0;
UIBezierPath *path = [UIBezierPath bezierPath];
CGPoint startPoint = CGPointMake(rect.size.width/5.0, 0);
CGPoint pointBeforeTopCurve = CGPointMake(rect.size.width - radius, 0);
CGPoint topRightCorner = CGPointMake(rect.size.width, 0);
CGPoint pointAfterTopCurve = CGPointMake(rect.size.width, 0.0-radius);
CGPoint pointBeforeBottomCurve = CGPointMake(rect.size.width, rect.size.height-radius);
CGPoint bottomRightCorner = CGPointMake(rect.size.width, rect.size.height);
CGPoint pointAfterBottomCurve = CGPointMake(rect.size.width - radius, rect.size.height);
CGPoint pointBeforeArrow = CGPointMake(rect.size.width/5.0, rect.size.height);
CGPoint arrowPoint = CGPointMake(0, rect.size.height/2.0);
[path moveToPoint:pointBeforeTopCurve];
[path addQuadCurveToPoint:pointAfterTopCurve controlPoint:topRightCorner];
[path addLineToPoint:pointBeforeBottomCurve];
[path addQuadCurveToPoint:pointAfterBottomCurve controlPoint:bottomRightCorner];
[path addLineToPoint:pointBeforeArrow];
[path addLineToPoint:arrowPoint];
[path addLineToPoint:startPoint];
推荐答案
你可以用 Quartz
.您将需要子类 UIButton
并实现其 drawRect:
方法.您将必须定义一个路径并用渐变填充它.
You can do this with Quartz
. You will need subclass UIButton
and implement its drawRect:
method. You will have to define a path and fill it with a gradient.
您还必须实现 hitTest:withEvent:
,因为它涉及非矩形形状.
You will also have to implement hitTest:withEvent:
as it involves non-rectangular shape.
这篇关于不使用图像的自定义 UIButton 形状的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:不使用图像的自定义 UIButton 形状


基础教程推荐
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01