首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CG梯度崩溃

CG梯度崩溃
EN

Stack Overflow用户
提问于 2012-02-29 18:15:32
回答 1查看 361关注 0票数 2

不知道是否有人可以帮助我,但同时希望我也能帮助其他人…

我有一个CG梯度的问题,它在模拟器中运行,但在设备上崩溃。我已经搜索和阅读了"CG梯度在模拟器上运行,但不是在iPhone上运行“线程,我认为这是一个类似的问题,即由于我使用ARC和它发布CGFloat太早,但我不太明白如何实现与我的代码相关的建议修复。(请参考底部的代码)

所以如果有人能帮我那部分我会很感激的??

无论如何,崩溃是如此糟糕,以至于它似乎继续在设备上以一种非常奇怪的状态运行应用程序,我可以删除设备上的应用程序,并尝试再次运行它,并注释掉令人不快的代码,但它仍然会导致崩溃。无论我做了什么,它都不允许应用程序再次在设备上运行。事实证明,经过几个小时的挠头之后,我需要重置我试图部署到的iPad设备,因为尽管它已被关闭/从设备中删除,但它仍然保留着配置配置文件。

希望这是有意义的,也可以帮助一些人。

谢谢

代码语言:javascript
复制
CGFloat colors [] = { 
    0, 0, 0, 0, 
    0, 0, 0, 0
};    

CGFloat colors2 [] = { 
    190.00/255.00, 211.00/255.00, 60.00/255.00, 1.0, 
    138.00/255.00, 153.00/255.00, 43.00/255.00, 1.0
};

CGFloat colors3 [] = { 
    159.00/255.00, 164.00/255.00, 39.00/255.00, 1.0,
    110.00/255.00, 120.00/255.00, 27.00/255.00, 1.0 

};


CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient;
if (which_state==@"1") {
    gradient = CGGradientCreateWithColorComponents(baseSpace, colors2, NULL, 2);
    NSLog(@"which state has changed");
} else if (which_state==@"2"){
    gradient = CGGradientCreateWithColorComponents(baseSpace, colors3, NULL, 2);
} else if (which_state==@"3"){
    gradient = CGGradientCreateWithColorComponents(baseSpace, colors3, NULL, 2);
} else if (which_state==@"0"){
    gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
}


CGColorSpaceRelease(baseSpace), baseSpace = NULL;


CGContextSaveGState(context);
CGContextMoveToPoint(context, (width/4*0)+5, 0);
CGContextAddLineToPoint(context, (width/4*0)+30, self.frame.size.height-3);
CGContextAddLineToPoint(context, (width/4*1)+30, self.frame.size.height-3);
CGContextAddLineToPoint(context, (width/4*1)+5, 0);
CGContextAddLineToPoint(context, (width/4*0)+5, 0);
CGContextClip(context);

CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient), gradient = NULL;

CGContextRestoreGState(context);
CGContextFillPath(context);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-29 18:26:18

你没有说应用程序是如何崩溃的,但这看起来是错误的:

代码语言:javascript
复制
CGGradientRef gradient; 
if (which_state==@"1")
... 

您正在使用==比较字符串,并且您应该使用if ([which_state isEqualToString:@"1"])==检查指针是否相等,而不是字符串是否相等。从代码的外观来看,使用枚举可能更好,但这是一个次要问题。

如果您的代码遍历了这组If语句,但没有命中任何内容(因为==可能不会给出匹配结果),那么您就得到了一个未初始化的CGGradientRef,您稍后会尝试绘制并释放它。这会导致崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9497213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档