如何突出显示 UIButton 子类?

2023-12-31

我有一个子类UIButton我覆盖的地方drawRect用于自定义外观的按钮。

但现在单元格不突出显示。

我怎样才能解决这个问题?

我已经为按下单元格时的另一个自定义绘制矩形准备好了代码。

- (void)drawRect:(CGRect)rect
{
    //// General Declarations
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = UIGraphicsGetCurrentContext();

    //// Color Declarations
    UIColor* red = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: 1];
    CGFloat redRGBA[4];
    [red getRed: &redRGBA[0] green: &redRGBA[1] blue: &redRGBA[2] alpha: &redRGBA[3]];

    UIColor* darkRed = [UIColor colorWithRed: (redRGBA[0] * 0.8) green: (redRGBA[1] * 0.8) blue: (redRGBA[2] * 0.8) alpha: (redRGBA[3] * 0.8 + 0.2)];
    UIColor* lightRed = [UIColor colorWithRed: (redRGBA[0] * 0.8 + 0.2) green: (redRGBA[1] * 0.8 + 0.2) blue: (redRGBA[2] * 0.8 + 0.2) alpha: (redRGBA[3] * 0.8 + 0.2)];

    //// Gradient Declarations
    NSArray* redGradientColors = [NSArray arrayWithObjects: 
                                  (id)darkRed.CGColor, 
                                  (id)lightRed.CGColor, nil];
    CGFloat redGradientLocations[] = {0, 1};
    CGGradientRef redGradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)redGradientColors, redGradientLocations);

    //// Shadow Declarations
    CGColorRef shadow = [UIColor lightGrayColor].CGColor;
    CGSize shadowOffset = CGSizeMake(0, -0);
    CGFloat shadowBlurRadius = 1;
    CGColorRef shadow2 = [UIColor blackColor].CGColor;
    CGSize shadow2Offset = CGSizeMake(0, -0);
    CGFloat shadow2BlurRadius = 2;


    //// Rounded Rectangle Drawing
    UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(35, 5, 250, 50) cornerRadius: 6];
    CGContextSaveGState(context);
    CGContextSetShadowWithColor(context, shadow2Offset, shadow2BlurRadius, shadow2);
    CGContextSetFillColorWithColor(context, shadow2);
    [roundedRectanglePath fill];
    [roundedRectanglePath addClip];
    CGContextDrawLinearGradient(context, redGradient, CGPointMake(160, 55), CGPointMake(160, 5), 0);

    ////// Rounded Rectangle Inner Shadow
    CGRect roundedRectangleBorderRect = CGRectInset([roundedRectanglePath bounds], -shadowBlurRadius, -shadowBlurRadius);
    roundedRectangleBorderRect = CGRectOffset(roundedRectangleBorderRect, -shadowOffset.width, -shadowOffset.height);
    roundedRectangleBorderRect = CGRectInset(CGRectUnion(roundedRectangleBorderRect, [roundedRectanglePath bounds]), -1, -1);

    UIBezierPath* roundedRectangleNegativePath = [UIBezierPath bezierPathWithRect: roundedRectangleBorderRect];
    [roundedRectangleNegativePath appendPath: roundedRectanglePath];
    roundedRectangleNegativePath.usesEvenOddFillRule = YES;

    CGContextSaveGState(context);
    {
        CGFloat xOffset = shadowOffset.width + round(roundedRectangleBorderRect.size.width);
        CGFloat yOffset = shadowOffset.height;
        CGContextSetShadowWithColor(context,
                                    CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)),
                                    shadowBlurRadius,
                                    shadow);

        [roundedRectanglePath addClip];
        CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(roundedRectangleBorderRect.size.width), 0);
        [roundedRectangleNegativePath applyTransform: transform];
        [[UIColor grayColor] setFill];
        [roundedRectangleNegativePath fill];
    }
    CGContextRestoreGState(context);

    CGContextRestoreGState(context);

    [[UIColor blackColor] setStroke];
    roundedRectanglePath.lineWidth = 1;
    [roundedRectanglePath stroke];

    //// Cleanup
    CGGradientRelease(redGradient);
    CGColorSpaceRelease(colorSpace);
}

子类化 UIButton 没有意义,因为它是一种程序集/簇类。

在子类化 UIControl 并添加一些自定义行为时,我拥有创建自己的按钮的最佳经验。

还检查this https://stackoverflow.com/questions/5045672/create-uibutton-subclass(你不应该子类化 UIButton)。

然后还有检查你如何突出显示 UIControl 子类 https://stackoverflow.com/questions/4428437/highlighting-a-uicontrol-subclass.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何突出显示 UIButton 子类? 的相关文章

  • iphone:在 UIWebView 之上查看?

    我正在开发一个浏览器应用程序 并且 UIWebView 顶部有一个地址栏 在 MobileSafari 上 如果向下滚动 地址栏开始移动到顶部 移出屏幕 并且 UIWebView 不会滚动 只有当地址栏完全消失时 它才开始滚动 我也想在我的
  • 使用 iPhone 摄像头检测心率 [重复]

    这个问题在这里已经有答案了 可能的重复 使用摄像头检测心率 https stackoverflow com questions 9274027 detecting heart rate using the camera 我正在研究 iOS
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 为什么使用[ClassName alloc]而不是[[self class] alloc]?

    我正在读马克 达尔林普尔 Mark Dalrymple 的著作在 Mac 上学习 Objective C 仅在协议章节 所以仍然相对较新 并试图弄清楚一些事情 为什么要通过类自己的名称来引用它 如果我有一个叫做Foo 为什么我会想写 比如说
  • 私人 iPhone 应用程序?

    我有兴趣编写连接到内部网或外部网的应用程序 换句话说 我想为我的客户制作私人应用程序 但我不希望每个人都能够访问它并能够下载它 您知道是否有一种方法可以将企业应用程序仅分发给特定的人 Android 也做同样的事情吗 The iPhone
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 您将如何实现一个检测水平滑动以允许分页的 UITableView?

    我想实现一个 UITableView 一次显示 20 行 但考虑到我实际上可能要展示 120 个项目 我想使用某种分页来处理这个问题 使用前 20 项填充表 当用户从右向左滑动时 用接下来的 20 个项目重新加载 UITableView 从
  • 使用 Google place API 从 lat long 获取附近的地点

    我正在使用 google place API 即 https maps googleapis com maps api place search json location 33 7167 73 0667 radius 500 type f
  • Objective C UIImagePNGRepresentation内存问题(使用ARC)

    我有一个基于 ARC 的应用程序 它从 Web 服务加载大约 2 000 个相当大 1 4MB 的 Base64 编码图像 它将 Base64 解码后的字符串转换为 png图像文件并将其保存到磁盘 这一切都是在一个循环中完成的 我不应该有任
  • iPhone Developer' 与任何有效的、未过期的证书/私钥对不匹配 - 但我正在创建 iPad 应用程序 [重复]

    这个问题在这里已经有答案了 可能的重复 代码签名错误 身份 iPhone Developer 与默认钥匙串中的任何有效证书 私钥对不匹配 https stackoverflow com questions 2108503 code sign
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s

随机推荐

  • 在Java中,两个字符相加的结果是int还是char?

    添加时 a b 它产生 195 是输出数据类型char or int 添加 Java 字符 短整型或字节的结果是int 关于二进制数字提升的 Java 语言规范 http docs oracle com javase specs jls s
  • 在 Java 中反序列化序列化的 php 对象

    有谁知道是否有可能 实际上是否已经完成 在 php 中序列化对象并在 Java 中反序列化 java php 通信 也许需要一个适配器 你怎么认为 Thanks 有serialized php parser http code google
  • 使用 Jinja2 对 JavaScript 进行转义字符串?

    如何使用 Jinja2 转义 HTML 以便它可以用作 JavaScript jQuery 中的字符串 如果我使用 Django 的模板系统 我可以这样写 mydiv append html string escapejs 姜戈的 esca
  • 减去双打时的奇怪结果[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 C 中的浮点运算不精确 https stackoverflow com questions 753948 why is floating point arithmetic in c impre
  • Matplotlib:重新排序子图

    Say that I have a figure fig which contains two subplots as in the example from the documentation http matplotlib org ex
  • 为什么 nuget 要安装一堆系统命名空间引用?

    我正在尝试从 nuget 安装一个库 我原本期望可能有 3 或 4 个不同的依赖项 但它安装了一大堆System依赖关系 这是日志 Attempting to gather dependency information for packag
  • Android Studio 2.3.3 首次运行时卡住

    我下载了安卓工作室2 3 3 https developer android com studio index html for Linux并将内容解压到 usr local then cd android studio bin 编辑了文件
  • 当我从 MainLayout 停止代码时,防止代码在我的页面上运行

    我有一个带有 MainLayout 的 Blazor PWA 应用程序和一堆页面 每当用户未登录时 我想将他们重定向到登录屏幕 如果我可以将它们从 MainLayout 重定向到登录屏幕 我已经知道用户尚未登录 那就太好了 我只是检查 co
  • 房间失效跟踪器初始化两次

    我有一个水平回收器视图 其中包含自定义项目 每个项目都可以保留当前项目在回收器视图中的位置 我想在使用拖放移动项目时更新项目位置 但是 当水平视图中的项目超过三个时 数据将被删除 请帮助我 源代码 https github com parm
  • 使用 Parse 和 PubNub 的 Android 聊天应用程序指南

    我正在尝试创建一个简单的 Android 聊天应用程序 用户可以在其中注册并拥有好友列表来开始对话 我打算使用Parse https parse com 对于数据库后端和PubNub http www pubnub com 对于实际的聊天频
  • 如何使用 AWS Amplify 和 Next.js 创建生产环境变量

    我有一个 API 密钥 需要它来访问 API 端点 在我的 Next js 应用程序中 我将此密钥存储在 env local像这样 API KEY qwerty123 我在我的getStaticProps与 process env 一起使用
  • Gcm电话注册错误

    我正在尝试设置一个应用程序来与 gcm 一起使用 但每次我收到phone registration error 错误 根据 Gcm 文档 此错误意味着 Incorrect phone registration with Google Thi
  • 如何将变量传递给使用 gcc 编译的 intel 格式内联 asm 代码

    我想向您寻求一些帮助 我有一个包含大量 C 源代码的项目 大多数是用gcc编译的 但也有一些是用Intel编译器编译的 后面的代码在微软有很多内联asm代码MASM格式 我想用 gcc 编译整个项目并修改尽可能少的代码 所以我编写了一个 p
  • 无法解析新 Android Studio 项目上的符号 GooglePlayServicesClient

    我刚刚安装了 Android Studio 1 1 0 并创建了一个新项目 我使用包括 Google 登录在内的登录活动创建了它 项目一打开 我就看到很多错误PlusBaseActivity java 这些似乎源于这样一个事实 com go
  • iOS7:UITapGestureRecognizer 重用问题

    我设置了三个按钮 每个按钮都标记为 1 3 我的 UITapGestureRecognizer 仅工作一次 并且仅适用于第一个 UIButton 无法选择其他两个选项 代码 void viewDidLoad super viewDidLoa
  • 从另一个列表中获取项目的边界

    我有一个清单 就像 tlist 0 0 0 07 0 13 0 15 0 2 0 22 which is sorted 我还有另一个清单 newlist 0 0 0 04 0 08 0 12 0 16 0 2 numbers with a
  • 如何使用加密密码连接到 PostgreSQL 服务器

    在通常的情况下 连接字符串包含纯文本的密码 但这可以被Wireshark捕获 所以我想在连接字符串中使用加密的密码 我从 Postgres 文档中找到了以下摘录 通过网络加密密码MD5认证方式 在将密码发送到客户端之前 在客户端对密码进行双
  • c - 返回状态/值的适当范围

    最近在看一本关于linux编程的书时 得到这样的信息 exit 的 status 参数定义了进程的终止状态 当该进程的父进程调用 wait 时 该状态可用 尽管定义为 int 但实际上只有状态的底部 8 位可供父级使用 并且只有0 127建
  • DelayedJob 错误:已经有一个或多个程序实例正在运行

    一些背景故事 昨晚 当delayed job工作人员正在处理图像处理作业时 我的服务器磁盘空间不足 当我尝试阻止工作人员时 我得到的答复是 已终止 RAILS ENV production script delayed job stop T
  • 如何突出显示 UIButton 子类?

    我有一个子类UIButton我覆盖的地方drawRect用于自定义外观的按钮 但现在单元格不突出显示 我怎样才能解决这个问题 我已经为按下单元格时的另一个自定义绘制矩形准备好了代码 void drawRect CGRect rect Gen