Questions tagged «core-graphics»

核心图形是Apple在Mac OS X和iOS上进行低级绘图操作的框架。

16
如何在UIView下绘制阴影?
我正在尝试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]; } ..但这对我不起作用,我对(a)接下来要去哪里和(b)是否需要对我UIView进行这项工作感到有些困惑?

26
iOS 7.0下无效的上下文0x0和系统降级
不幸的是,我已经阅读了尽可能多的搜索结果,不幸的是,每个搜索结果似乎都专注于特定的函数调用。 我的问题是,我从多个函数中得到了相同的错误,我猜这是从我使用的函数中回调的。 更糟糕的是,实际的代码在一个自定义的私有框架内,该框架正在另一个项目中导入,因此调试不是那么简单吗? 谁能指出我正确的方向?我感觉我在错误地或在错误的上下文中调用了某些方法,但是此时xcode的输出不是很有帮助。 :CGContextSetFillColorWithColor:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextSetStrokeColorWithColor:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 CGContextSaveGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextSetFlatness:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextAddPath:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextDrawPath:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextRestoreGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 :CGContextGetBlendMode:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性整体下降。此通知是礼貌的:请解决此问题。在即将进行的更新中,它将成为致命错误。 当显示自定义视图或其继承的类之一时,可能会发生这些错误。此时它们会产生多次,直到键盘不提供任何输入为止。触摸事件仍然被记录,但是系统速度变慢,最终可能导致未分配的对象错误。 编辑#1:我确实可以访问要导入的框架,但是在导致问题的类中看不到任何奇怪的东西。 编辑2:我刚刚收到一封电子邮件,称iOS 7.1已为开发人员发布。我很好奇,看看情况是否会消失,变得更糟或可以解决。

11
如何从UIImage(可可触摸)或CGImage(核心图形)获取像素数据?
我有一个UIImage(可可粉)。由此,我很高兴获得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; }

16
UIImage:调整大小,然后裁剪
从字面上看,我已经将自己的脸庞撞了好几天,尽管我一直觉得自己正处于启示的边缘,但我根本无法实现自己的目标。 我认为,在设计的概念阶段之前,要想从iPhone的相机或照片库中抓取图像,然后使用相当于“ 宽高比填充”选项的功能将图像缩小到指定的高度,将是一件微不足道的事情。 UIImageView(完全在代码中),然后裁剪掉传递的CGRect中不适合的所有内容。 从相机或库中获取原始图像非常简单。我对其他两个步骤证明多么困难感到震惊。 所附图像显示了我正在尝试实现的目标。有人能好心地握住我的手吗?到目前为止,我发现的每个代码示例似乎都粉碎了图像,颠倒了图像,看起来像胡扯,划界,否则就无法正常工作。

18
CGContextDrawImage在传递UIImage.CGImage时将图像上下颠倒
有谁知道为什么CGContextDrawImage会颠倒我的形象?我正在从应用程序中加载图像: UIImage *image = [UIImage imageNamed:@"testImage.png"]; 然后简单地要求核心图形将其绘制到我的上下文中: CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage); 它在正确的位置和尺寸进行渲染,但是图像是颠倒的。我一定会在这里遗漏一些明显的东西吗?

7
通过用户的触摸画出完美的圆圈
我有这个练习项目,允许用户在用手指触摸时在屏幕上绘制。我做的非常简单的App就是锻炼方式。我的小堂兄在用我的iPad在这个App上自由地用手指画东西(孩子画的东西:圆,线等,无论他想到什么)。然后他开始画圆,然后他问我将其设为“好圆”(根据我的理解:将画出的圆完美地画成圆形,因为我们知道,无论我们多么努力地尝试用手指在屏幕上画出一些东西,圆永远不会真正像圆一样圆)。 因此,我的问题是,代码中是否有任何方法可以首先检测用户绘制的形成圆的线,并通过使其在屏幕上完美地变圆来生成大致相同的圆。使一条不太直线的直线是我会知道的方法,但是对于圆形,我不太了解如何使用Quartz或其他方法进行。 我的理由是,在用户抬起手指以证明他实际上试图绘制一个圆这一事实之后,直线的起点和终点必须彼此接触或交叉。

19
如何将UIImage旋转90度?
我有一个UIImage是UIImageOrientationUp(纵向),我想逆时针旋转90度(景观)。我不想使用CGAffineTransform。我希望的像素UIImage实际移动位置。我正在使用一个代码块(如下所示),该代码块最初旨在调整a的大小UIImage以实现此目的。我将目标尺寸设置为的当前尺寸,UIImage但出现错误: (错误):CGBitmapContextCreate:无效数据字节/行:对于8个整数位/分量,3个分量kCGImageAlphaPremultipliedLast,应至少为1708。 (只要提供SMALLER大小作为目标大小BTW,我都不会出错)。如何UIImage在保留当前尺寸的同时仅使用核心图形功能旋转90度逆时针旋转? -(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) { …

19
从UIColor中获得较浅和较深的颜色
我一直希望能够将任何UIColor变成渐变。我打算这样做的方法是使用Core Graphics绘制渐变。我想做的就是获得一种颜色,让我们说: [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]; 并获得一个UIColor,它的阴影要深一些,而阴影要浅一些。有谁知道如何做到这一点?谢谢。

4
使用drawRect还是不使用drawRect(何时应该使用drawRect / Core Graphics与子视图/图像进行比较,为什么?)
为了阐明这个问题的目的:我知道如何使用两个子视图并使用drawRect创建复杂的视图。我正在尝试完全理解何时以及为什么要使用另一个。 我还了解到,提前进行大量优化并在执行任何性能分析之前以更困难的方式进行操作是没有意义的。考虑到我对这两种方法都比较满意,现在真的想加深了解。 我的很多困惑来自于学习如何使表格视图滚动性能真正变得平滑而又快速。当然,此方法的原始来源来自iPhone的twitter(以前为tweetie)背后的作者。基本上,它说的是使表格平滑地滚动,其秘密是不要使用子视图,而是在一个自定义uiview中进行所有绘制。从本质上讲,似乎使用大量子视图会减慢渲染速度,因为它们具有大量开销,并且会不断在其父视图上进行重新组合。 公平地讲,这是在3GS刚起步时才写的,而iDevices从那时起变得越来越快。仍然在互连网上和其他地方经常建议使用此方法来获得高性能表。实际上,这是Apple的Table Sample Code中建议的方法,一些WWDC视频(面向iOS开发人员的实用绘图)和许多iOS 编程书籍中都建议使用该方法。 甚至还有看起来很棒的工具来设计图形并为其生成Core Graphics代码。 因此,起初我会相信“存在Core Graphics的原因。它非常快!” 但是,一旦我想到“尽可能使用Favor Core Graphics”这个主意,我就开始发现drawRect通常是导致应用程序响应速度不佳的原因,这在内存方面非常昂贵,并且确实给CPU造成了负担。基本上,我应该“ 避免重写drawRect ”(WWDC 2012 iOS App性能:图形和动画) 所以我想,像所有事物一样,它很复杂。也许您可以帮助自己和其他人了解使用drawRect的时间和原因? 我看到使用Core Graphics的几种明显情况: 您拥有动态数据(Apple的股票图表示例) 您有一个灵活的UI元素,无法使用简单的可调整大小的图像来执行 您正在创建一个动态图形,该图形一旦渲染就会在多个地方使用 我看到了避免使用Core Graphics的情况: 视图的属性需要单独设置动画 您的视图层次结构相对较小,因此使用CG所付出的任何额外努力都不值得 您想要更新视图片段而不重绘整个内容 当父视图大小更改时,子视图的布局需要更新 因此,请赋予您的知识。在什么情况下可以获取drawRect / Core Graphics(也可以通过子视图完成)?哪些因素导致您做出该决定?建议如何/为什么在一个自定义视图中进行绘制以实现黄油状的平滑表格单元滚动,但是苹果出于性能考虑而建议不建议使用drawRect?那么简单的背景图像呢(何时使用CG与可调整大小的png图像创建它们)? 制作有价值的应用程序可能不需要对此主题有深入的了解,但是我不喜欢在无法解释原因的情况下在各种技术之间进行选择。我的脑子生我的气。 问题更新 感谢大家提供的信息。一些澄清的问题在这里: 如果您正在绘制带有核心图形的东西,但是可以使用UIImageViews和预渲染的png完成相同的事情,那么您是否应该始终遵循这种做法? 一个类似的问题:尤其是使用诸如此类的badass工具时,应何时考虑在核心图形中绘制界面元素?(可能在元素的显示是可变的时。例如,具有20种不同颜色变化的按钮。还有其他情况吗?) 根据我在下面的答案中的理解,是否可以通过在复杂的UIView渲染本身之后有效地捕获单元格的快照位图,并在滚动和隐藏复杂的视图时显示该位图,来获得相同的性能?显然,必须解决一些问题。我有一个有趣的想法。

6
如何在iPhone上动态创建彩色的1x1 UIImage?
我想基于UIColor动态创建1x1 UIImage。 我怀疑这可以通过Quartz2d迅速完成,并且我正在仔细研究文档,以期掌握基本原理。但是,看起来有很多潜在的陷阱:无法正确识别每个事物的位数和字节数,未指定正确的标志,不会释放未使用的数据等。 如何使用Quartz 2d(或更简单的方法)安全地完成此操作?

6
iOS 7样式的模糊视图
是否有人知道将复制iOS7样式模糊视图的任何控件。 我假设可以存在某种UIView子类来复制行为。 我说的是这些类型的视图,它们会使背景变得非常模糊,以至于它们从背景视图中产生拉动效果。


8
如何控制阴影扩散和模糊?
我已经在草图中设计了UI元素,其中一个元素的阴影带有模糊1和散布0。只是shadowOpacity)如何控制像模糊和扩散之类的东西? 编辑: 这是我在Sketch中的设置: 这就是我希望我的阴影看起来像的样子: 这是当前的样子:注意,您必须单击图片才能实际看到阴影。 我的代码如下: func setupLayer(){ view.layer.cornerRadius = 2 view.layer.shadowColor = Colors.Shadow.CGColor view.layer.shadowOffset = CGSize(width: 0, height: 1) view.layer.shadowOpacity = 0.9 view.layer.shadowRadius = 5 }

15
如何使UILabel显示轮廓文本?
我只需要在白色UILabel文字周围添加一个像素的黑色边框。 我使用下面的代码将UILabel子类化,从一些与切向相关的在线示例中我巧妙地将它们拼凑在一起。它可以工作,但速度非常非常慢(除了在模拟器上),而且我也无法使其垂直居中放置文本(因此我暂时将y值硬编码在最后一行)。啊! void ShowStringCentered(CGContextRef gc, float x, float y, const char *str) { CGContextSetTextDrawingMode(gc, kCGTextInvisible); CGContextShowTextAtPoint(gc, 0, 0, str, strlen(str)); CGPoint pt = CGContextGetTextPosition(gc); CGContextSetTextDrawingMode(gc, kCGTextFillStroke); CGContextShowTextAtPoint(gc, x - pt.x / 2, y, str, strlen(str)); } - (void)drawRect:(CGRect)rect{ CGContextRef theContext = UIGraphicsGetCurrentContext(); CGRect viewBounds = self.bounds; CGContextTranslateCTM(theContext, 0, viewBounds.size.height); CGContextScaleCTM(theContext, …

6
带有CGPoint数据的NSLog
我有一个CGPoint被称为触摸点: UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self]; 我想将x坐标值输入到我的控制台日志中: NSLog(@"x: %s", point.x); 当我使用它时,此的日志输出是: x :(空) 我已经验证了使用调试器和变量监视程序调用时,该点不为null。 任何帮助表示赞赏, 谢谢 // :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.