EXC_BAD_ACCESS绘制阴影

2024-03-10

我试图向我的 UIView 添加阴影,但在我的 drawRect 方法中我得到了 EXC_BAD_ACCESS。 (我用的是ARC)

-(void) drawRect:(CGRect)rect {

    CGColorRef lightColor =  [UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8].CGColor;

    CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor;   

    CGContextRef context = UIGraphicsGetCurrentContext();
    // Draw shadow
    CGContextSaveGState(context);
    CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);
    CGContextSetFillColorWithColor(context, lightColor);
    CGContextFillRect(context, _coloredBoxRect);
    CGContextRestoreGState(context);
}

错误信息:线程 1:程序收到信号:“EXC_BAD_ACCESS”。

Line: CGContextSetFillColorWithColor(context, lightColor);

当我将此行更改为:

[[UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8] setFill];

我得到同样的错误,但在这一行:

CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);

Update我最终通过更改解决了这个问题:

CGColorRef ShadowColor = [UIColor colorWithRed:0.2 绿色:0.2 蓝色:0.2 alpha:0.4].CGColor;

to

浮动组件[4] = {0, 0, 0, 1.0/3.0}; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGColorRef ShadowColor = CGColorCreate( colorSpace, 组件);

最终(工作)代码:

-(void) drawRect:(CGRect)rect 
{
    float components[4] = {0, 0, 0, 1.0/3.0};
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGColorRef shadowColor = CGColorCreate( colorSpace, components);

    CGContextRef context = UIGraphicsGetCurrentContext();

    // Draw shadow
    CGContextSaveGState(context);
    CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);
    CGContextSetFillColorWithColor(context, lightColor);

    [[UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8] setFill];

    CGContextRestoreGState(context);
}

The UIColor当 ARC 启用时,可能无法将其放入自动释放池中。如果不将其放入池中并立即释放,CGColor您引用的 (lightColor, ShadowColor) 也会在您传递它时被释放,因为它们由UIColor,并且没有采取任何措施来确保这些(非NSObject) 超出该范围的引用仍然有效。

我无法重现您的确切问题,但我可以使用以下方法重现它:

CGColorRef shadowColor =
  [[UIColor alloc] initWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor;

当在 sim v5.0 上运行时。

您发布了确切的示例吗?您运行的操作系统版本是什么?所有操作系统版本都会发生这种情况吗?也许你应该看一下 asm。

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

EXC_BAD_ACCESS绘制阴影 的相关文章

随机推荐

  • 将多个图包裹在一个图像中

    我试图将许多图包装在一起 因为它们密切相关 使用 1 个连续变量和 1 个分类变量显示密度 按一周中的某一天细分 其中每一天都是不同的图 在 R 中 我可以使用grid arrange from gridExtra or facet wra
  • 如何在普通的
    中使用 而不是

    我有一个使用标准 HTML 的搜索表单
  • 制定紧凑的隐私政策

    我正在研究使用 cookie 进行跟踪的想法 并注意到我当前的网站没有紧凑的隐私政策 我用谷歌搜索了一下 有很多方法可以创建它们 但要付出一定的代价 只是想知道是否有一种方法可以在不付费的情况下做到这一点 有任何想法吗 我正忙着同样的事情
  • Angular 2+ 中的 Azure Graph / Microsoft Graph 查询

    我想在 Angular 5 Web 应用程序中从 Azure Active Directory 查询应用程序角色和组声明 我想授予管理员对页面的特殊权限 访问权限 我在 Azure 中注册了一个 B2C 应用程序 在以下地址注册了一个 Mi
  • 如何获取redis中的所有集合?

    我知道 KEYS 命令 但它只返回键 我猜测所有类型为 String 的键 并且显然集合不被视为键 有没有获取数据库中所有集合的命令 其他数据类型 散列 列表 排序集 怎么样 http redis io topics data types
  • 如何保持 RTSP 会话存活?

    我尝试在 Google Nexus S 2 3 7 HTC Desire 2 3 3 和 Samsung Galaxy 3 2 上进行流式传输 只有 Google Nexus 存在 RTSP 会话超时问题 我阅读了一些关于这个问题的帖子 似
  • 将 GeoDataFrame 多边形转换为 kml 文件

    我有一个 geopandas GeoDataFrame 其中包含各种多边形和颜色 我用它来绘制气象数据 我问的另一个问题here https stackoverflow com questions 35516318 plot colored
  • JS 代理 HTML5 画布上下文

    我希望代理画布 API 这样我就可以测试抽象方法是否确实绘制到画布上 但是我遇到了代理后出现错误的问题 strokeStyle setter called on an object that does not implement inter
  • 相对于页面滚动背景

    这是我第一次使用 Stack Overflow 所以如果我的问题有点冗长 我深表歉意 我有点为难 我想创建这种视差滚动效果 其中背景图像 其高度大于窗口的高度 始终与页面上的进度直接相关地滚动 例如 当您向下滚动页面 25 时 背景图像应该
  • 如何使用 JavaScript 在 IE 6 7 8 9 中分离事件

    这是部分代码 不是完整版本 我有一个荧光笔 可以在以下情况下突出显示特定的 html 元素 鼠标悬停 我也有一个点击事件和监听器 我的问题是 荧光笔事件 侦听器使用 Internet Explorer v6 v7 v8 v9 时不分离 我究
  • 始终在非视网膜显示屏上使用的图像的视网膜版本

    In Cocoa application I ve got 16x16 and 32x32 2x version of an image When the image is displayed in NSImageView Mac OS X
  • MongoDb:避免过多的磁盘空间

    我有一个已分配85GB空间的数据库 我使用 show dbs 命令获得了这个大小 但是当我使用 db stats 时 我得到的存储大小为 63GB 查看文档后 我发现 dat mongo db 为创建的数据库分配了一个大小 然后填充了实际数
  • 使用 Play 核心库验证非 Google Play 应用安装

    一些背景 我们大多数人可能都遇到过这样的情况ResourceNotFoundException当我们迁移到安卓应用程序包释放方法 很明显 问题是由于侧面加载应用程序造成的 参考这里 https stackoverflow com quest
  • 我可以在编辑器编辑器中自定义标题标签(h1,h2,h3 ...)吗?

    我使用了 redactor 编辑器的插件来更改文本的字体大小和字体颜色 除了标题之外 它在其他标签中工作正常 不明白为什么 我试过这个 redactor redactor focus true plugins fontcolor fonts
  • 如何使用 ElementRef 和 Renderer2 将角度指令分配给 html 元素?

    我正在 Angular 6 中开发拖放应用程序 在拖放操作中 我正在动态创建新的 HTML 元素 DIV textarea 等元素 并为其分配样式 属性 默认 x 和 y 坐标通过使用应用程序的 ElementRef 和 Renderer2
  • DatabaseGenerateOption.Identity 不生成 Id

    使用 EntityFramework 代码优先 我创建了一个简单的Foo桌子 这是我的实体 public class Foo DatabaseGenerated DatabaseGeneratedOption Identity public
  • 如何解决 django.db.utils.IntegrityError: (1364,“字段‘名称’没有默认值”)

    我在尝试为 Django 项目创建超级用户时收到此错误 不确定哪个表需要默认值 name column 为我的 Django 项目成功创建迁移后 我运行了python manage py createsuperuser创建超级用户并得到以下
  • 以编程方式在 Eclipse 中导入库

    有没有办法以编程方式将库 Jar 文件 放入 Eclipse 项目中 到目前为止 我已经成功地使用以下命令以编程方式对其进行了外部引用 IPath path new Path C myfolder mylibrary jar librari
  • 如何将 ggplot2 grobs 与数据关联起来?

    例如 给定一个点的 ggplot 您如何找出给定点对应的数据行 样例图 library ggplot2 p lt ggplot mtcars aes mpg wt geom point facet wrap gear 我们可以得到包含点的
  • EXC_BAD_ACCESS绘制阴影

    我试图向我的 UIView 添加阴影 但在我的 drawRect 方法中我得到了 EXC BAD ACCESS 我用的是ARC void drawRect CGRect rect CGColorRef lightColor UIColor