我想UIView
在Cocoa Touch 的底部边缘画一个阴影.我明白我应该用CGContextSetShadow()
它画阴影,但Quartz 2D编程指南有点模糊:
CGContextSetShadow
,传递适当的值.我在UIView
子类中尝试了以下内容:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
Run Code Online (Sandbox Code Playgroud)
..但这对我不起作用,我有点不知道(a)下一步该去哪里,(b)如果有什么我需要做的让我UIView
做这个工作?
我已经阅读了很多关于这个可怕问题的搜索结果,不幸的是,每个人似乎都专注于特定的函数调用.
我的问题是我从多个函数中得到了相同的错误,我猜这些函数是从我使用的函数中调用的.
更糟糕的是,实际代码是在另一个项目中导入的自定义私有框架内,因此调试并不那么简单?
有人能指出我正确的方向吗?我有一种感觉我错误地调用某些方法或者上下文不好,但xcode的输出在这一点上并没有多大帮助.
:CGContextSetFillColorWithColor:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextSetStrokeColorWithColor:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
CGContextSaveGState:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextSetFlatness:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextAddPath:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextDrawPath:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextRestoreGState:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
:CGContextGetBlendMode:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.
当呈现自定义视图或其继承的类之一时,可能会发生这些错误.此时它们会多次生成,直到键盘不提供任何输入.触摸事件仍然已注册,但系统速度变慢,最终可能导致未分配的对象错误.
编辑#1:我确实可以访问正在导入的框架,但我没有看到导致问题的类中有任何奇怪的东西.
编辑#2:我刚刚收到一封发送给iOS 7.1的电子邮件.我很想知道这是否会消失,或者变得更糟,还是可以解决.
我有一个UIImage(Cocoa Touch).从那以后,我很高兴得到一个CGImage或其他你想要的东西.我想写这个函数:
- (int)getRGBAFromImage:(UIImage *)image atX:(int)xx andY:(int)yy {
// [...]
// What do I want to read about to help
// me fill in this bit, here?
// [...]
int result = (red << 24) | (green << 16) | (blue << 8) | alpha;
return result;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我一直在this this for for for for for for and and and while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while while
我认为,在我的设计的概念阶段提前,从iPhone的相机或库中获取图像,将其缩小到指定高度,使用与Aspect Fill选项相当的功能将是一件小事. UIImageView(完全在代码中),然后裁掉任何不适合传递给CGRect的东西.
从相机或图书馆获取原始图像非常简单.我很惊讶其他两个步骤的难度.
附图显示了我想要实现的目标.有人请你好好握住我的手吗?到目前为止我发现的每个代码示例似乎都会破坏图像,颠倒过来,看起来像废话,画出界限,或者其他方法都不能正常工作.
有谁知道为什么CGContextDrawImage
会把我的形象颠倒过来?我从我的应用程序加载图像:
UIImage *image = [UIImage imageNamed:@"testImage.png"];
Run Code Online (Sandbox Code Playgroud)
然后简单地要求核心图形将其绘制到我的上下文中:
CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);
Run Code Online (Sandbox Code Playgroud)
它呈现在正确的位置和尺寸,但图像是颠倒的.我一定错过了一些非常明显的东西吗?
我有一个UIImage
是UIImageOrientationUp
(纵向),我想通过90度逆时针旋转(景观).我不想用CGAffineTransform
.我想要UIImage
实际转移位置的像素.我正在使用一段代码(如下所示),最初是为了调整大小UIImage
来执行此操作.我将目标大小设置为当前大小UIImage
但是我得到一个错误:
(错误):CGBitmapContextCreate:无效数据字节/行:对于8个整数位/组件,3个组件,kCGImageAlphaPremultipliedLast,应该至少为1708.
(每当我提供SMALLER尺寸作为目标尺寸BTW时,我都不会收到错误).如何UIImage
在保留当前尺寸的同时仅使用核心图形功能旋转我的90度CCW?
-(UIImage*)reverseImageByScalingToSize:(CGSize)targetSize:(UIImage*)anImage
{
UIImage* sourceImage = anImage;
CGFloat targetWidth = targetSize.height;
CGFloat targetHeight = targetSize.width;
CGImageRef imageRef = [sourceImage CGImage];
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
if (bitmapInfo == kCGImageAlphaNone) {
bitmapInfo = kCGImageAlphaNoneSkipLast;
}
CGContextRef bitmap;
if (sourceImage.imageOrientation == UIImageOrientationUp || sourceImage.imageOrientation == UIImageOrientationDown) {
bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
} else {
bitmap = CGBitmapContextCreate(NULL, targetWidth, …
Run Code Online (Sandbox Code Playgroud) 我有这个练习项目,允许用户用手指触摸屏幕.我做的非常简单的App作为锻炼方式回来了.我的小表弟冒昧地用我的iPad用手指在这个应用程序上绘制东西(儿童画:圆圈,线条等等,无论他想到什么).然后他开始绘制圆圈,然后他让我把它变成"好圆圈"(根据我的理解:将绘制的圆圈完美地圆形,因为我们知道无论我们用手指在屏幕上画出一些东西有多稳定,圆圈永远不会像圆圈那样圆润.)
所以我的问题是,在代码中是否有任何方法我们可以首先检测用户绘制的线条,形成一个圆圈,并通过使其在屏幕上完美圆形来生成大致相同大小的圆圈.做一个不那么直线的东西我会知道怎么做,但至于圆圈,我不知道如何用石英或其他方法去做.
我的理由是,在用户抬起手指以证明他正试图实际绘制圆圈之后,线的起点和终点必须相互接触或交叉.
cocoa-touch core-graphics quartz-graphics ios shape-recognition
我希望能够将任何UIColor变成渐变.我打算这样做的方法是使用Core Graphics绘制渐变.我想要做的是获得一种颜色,让我们说:
[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
并得到一个UIColor,这是一些深色调和一些浅色调.有谁知道如何做到这一点?谢谢.
为了澄清这个问题的目的:我知道如何使用子视图和使用drawRect创建复杂的视图.我试图完全理解何时使用一个而不是另一个.
我也明白,提前优化这一点是没有意义的,并且在进行任何分析之前做一些更难的方法.考虑到我对这两种方法感到满意,现在真的想要更深刻的理解.
我的很多困惑来自学习如何使表格视图滚动性能真正流畅和快速.当然,这种方法的原始来源是来自twitter for iPhone(以前的tweetie)的作者.基本上它说,为了使表格滚动黄油光滑,秘诀是不使用子视图,而是在一个自定义uiview中完成所有绘图.从本质上讲,使用大量子视图似乎会减慢渲染速度,因为它们有很多开销,并且经常在父视图上重新合成.
公平地说,这是在3GS是一个非常新的品牌时写的,iDevices从那以后变得更快.不过这种方法是经常 建议在interwebs和其他高性能表.事实上,它是Apple的表示例代码中的一种建议方法,已经在几个WWDC视频(iOS开发人员的实用绘图)和许多iOS 编程书籍中提出过.
甚至还有很棒的工具来设计图形并为它们生成Core Graphics代码.
所以起初我会相信"核心图形存在的原因.它很快!"
但是当我认为我得到"尽可能支持核心图形"的想法时,我开始看到drawRect经常导致应用程序响应能力差,内存非常昂贵,并且真正对CPU征税.基本上,我应该" 避免覆盖drawRect "(WWDC 2012 iOS App性能:图形和动画)
所以我想,就像一切一样,它很复杂.也许你可以帮助自己和其他人了解使用drawRect的时间和原因?
我看到一些使用Core Graphics的明显情况:
我看到避免Core Graphics的情况:
所以赐予你的知识.您在什么情况下可以使用drawRect/Core Graphics(也可以通过子视图完成)?哪些因素会导致您做出这个决定?如何/为什么在一个自定义视图中绘制建议用于黄油平滑表格单元格滚动,但Apple建议drawRect反对性能原因一般?那么简单的背景图像(你何时使用CG创建它们与使用可调整大小的png图像)?
制作有价值的应用程序可能不需要深入理解这个主题,但我不喜欢在不能解释原因的情况下在技术之间进行选择.我的大脑生我的气.
感谢大家的信息.这里有一些澄清问题:
我想基于UIColor动态创建1x1 UIImage.
我怀疑这可以通过Quartz2d快速完成,而我正在仔细研究文档,试图掌握基础知识.但是,看起来存在很多潜在的缺陷:没有正确识别每个事物的位数和字节数,没有指定正确的标志,没有释放未使用的数据等.
如何使用Quartz 2d(或其他更简单的方法)安全地完成这项工作?
core-graphics ×10
ios ×8
cocoa-touch ×4
objective-c ×4
iphone ×3
uiimage ×2
cocoa ×1
gradient ×1
ios7 ×1
uicolor ×1
uikit ×1