Tag: 核心graphics

如何创build一个适用于视网膜显示的CGBitmapContext,而不是为正常显示浪费空间?

如果是在UIKit,包括drawRect ,Retina显示的高清方面是自动处理的吗? 那么这是否意味着在drawRect ,1024 x 768视图的当前graphics上下文实际上是2048 x 1536像素的位图上下文? ( 更新:如果我使用drawRect的当前上下文创build图像并打印其大小: CGContextRef context = UIGraphicsGetCurrentContext(); CGImageRef image = CGBitmapContextCreateImage(context); NSLog(@"width of context %i", (int) CGImageGetWidth(image)); NSLog(@"height of context %i", (int) CGImageGetHeight(image)); 然后在新的iPad上,禁用状态栏,打印2048和1536,iPad 2将显示1024和768) 实际上,我们享受了为我们自动处理的1点= 4像素的奢华。 但是,如果我们使用CGBitmapContextCreate ,那么这些将是像素,而不是点? (至less如果我们为该位图提供数据缓冲区,则缓冲区的大小(字节数)显然不是为了更高的分辨率,而是用于标准分辨率,即使我们将NULL作为缓冲区,以便CGBitmapContextCreate处理缓冲区对于我们来说,大小可能与传入数据缓冲区的大小相同,只是标准分辨率,而不是Retina的分辨率)。 我们总是可以为iPad 1和iPad 2以及新iPad创build2048 x 1536,但是这会浪费内存,处理器和GPU功耗,因为只有新iPad需要。 所以我们必须使用if () { } else { }来创build这样一个位图上下文,我们该怎么做呢? 我们所有的代码CGContextMoveToPoint必须调整Retina显示使用x * 2和y * 2与非视网膜显示只使用x, y […]

寻找iOS的graphics布局框架

对于一个iOS应用程序,我需要根据其types显示组合在一起的元素组,以及在完美布局中相互分离的不同组types。 我想到了使用一个无向图,分组节点都以一种循环引用相互指向,然后每个组作为另一个“元图”与它们的节点在循环引用中相互指向,希望再加上一个好的graphics布局框架,可以很好的显示出来。 不幸的是,我唯一听到的框架是graphviz ,但似乎没有iOS的可用端口。 所以我的问题是: 其他想法如何实现我所需要的? 一个很好的iOSgraphics布局的实现? iOS的graphviz可用的端口? 更新 :请注意,我不在寻找graphics绘制框架,这是用来绘制graphics和图表(如饼图等)的框架。 我正在寻找一个布局框架来确定抽象图中任意节点的最佳位置。

在iOS中使用核心graphics绘制外梯半圈的梯度?

我想在iOS中使用核心graphics绘制附加图像的形状。 这可能吗。 如果可能,请提供示例代码。 我想在形状上至less有3个颜色渐变。

drawRect圆和animation大小/颜色

我使用标准的CGContextFillEllipseInRect()代码在我的UIView的-drawRect:方法中绘制一个圆。 但是,我想稍微脉动(做得越来越小),用animation改变颜色填充的强度。 例如,如果圆圈充满了红色,我想脉动这个圆圈,并且使得红色在脉冲动作中及时变得更亮和更暗。 对Core Animation没有太多的经验我对如何做到这一点有点失落,所以任何帮助将不胜感激。

如何更快地将视图渲染成图像?

我正在做放大镜的应用程序,它允许用户触摸屏幕并移动他的手指,将有一个放大镜与他的手指path。 我用截图实现它,并将图像分配给放大镜图像视图,如下所示: CGSize imageSize = frame.size; UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0); CGContextRef c = UIGraphicsGetCurrentContext(); CGContextScaleCTM(c, scaleFactor, scaleFactor); CGContextConcatCTM(c, CGAffineTransformMakeTranslation(-frame.origin.x, -frame.origin.y)); [self.layer renderInContext:c]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenshot; 问题是self.layer renderInContext速度很慢,所以用户在移动手指的时候感觉不舒服。 而我试图在其他线程中运行self.layer renderInContext ,但是,这使放大镜图像看起来很奇怪,因为放大镜中的图像显示延迟。 有没有更好的方法来渲染视图到图像? renderInContext:使用GPU?

如何用CAShapeLayer和UIBezierPath绘制一个平滑的圆?

我试图通过使用CAShapeLayer并在其上设置循环path来绘制一个描边圈。 但是,这种方法在渲染到屏幕上的准确性比使用borderRadius时要less得多,或者直接在CGContextRef中绘制path。 以下是所有三种方法的结果: 请注意,第三个渲染效果不好,特别是在顶部和底部的中风。 我已经将contentsScale属性设置为[UIScreen mainScreen].scale 。 这是我的这三个圈子的绘图代码。 缺less什么使CAShapeLayer平滑绘制? @interface BCViewController () @end @interface BCDrawingView : UIView @end @implementation BCDrawingView – (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { self.backgroundColor = nil; self.opaque = YES; } return self; } – (void)drawRect:(CGRect)rect { [super drawRect:rect]; [[UIColor whiteColor] setFill]; CGContextFillRect(UIGraphicsGetCurrentContext(), rect); CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), NULL); [[UIColor redColor] setStroke]; CGContextSetLineWidth(UIGraphicsGetCurrentContext(), […]

CGColorGetComponents()不返回黑色和白色的正确值

有没有人遇到过这个问题? 这看起来像苹果的代码中的错误,如果人们同意这个代码应该做我认为应该做的事情,我会提交一个雷达。 我并不是那么熟悉CoreGraphics色彩pipe理,因此我在问一个bug报告给苹果之前就问过了。 这是一个模板项目直接出来,唯一的非模板代码是你在下面看到的。 请注意,红色,绿色和蓝色都显示正确的组件值,但不是白色或黑色。 如果先改变顺序,比如先黑白再红,绿,蓝,问题依然存在。 这是Swift 1.2和Xcode 6.3.1(6D1002)。 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let colorComps = [ CGColorGetComponents(UIColor.redColor().CGColor), CGColorGetComponents(UIColor.greenColor().CGColor), CGColorGetComponents(UIColor.blueColor().CGColor), CGColorGetComponents(UIColor.blackColor().CGColor), CGColorGetComponents(UIColor.whiteColor().CGColor) ] var components = [CGFloat]() for cc in colorComps { for i in 0…3 { components.append(cc[i]) } } println("components: \(components)") } }

OpenGL ES 2.0领域

使用GL_TRIANGLES在OpenGL ES 2.0中绘制纹理球体的最简单方法是什么? 我特别想知道如何计算顶点。

无法在iOS上创build超过400页的PDF文档

我正在使用下面的伪代码来生成一个PDF文档: CGContextRef context = CGPDFContextCreateWithURL(url, &rect, NULL); for (int i = 1; i <= N; i++) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; CGContextBeginPage(context, &mediaBox); // drawing code CGContextEndPage(context); [pool release]; } CGContextRelease(context); 它适用于小文档( N < 100页),但是如果文档大于400页(它在崩溃之前收到两条内存警告),它会使用太多的内存和崩溃。我已经确定没有泄漏仪器。 你有什么build议在iOS上创build大型的PDF文件? 非常感谢。 编辑:PDF创build是在后台线程完成。

如何旋转任意点周围的对象?

我想旋转一个UILabel在一个圆形的任意点,而不是一条直线。 这是我的代码。最后一点是完美的,但它在初始点和结束点之间是一条直线。 – (void)rotateText:(UILabel *)label duration:(NSTimeInterval)duration degrees:(CGFloat)degrees { /* Setup the animation */ [UILabel beginAnimations:nil context:NULL]; [UILabel setAnimationDuration:duration]; CGPoint rotationPoint = CGPointMake(160, 236); CGPoint transportPoint = CGPointMake(rotationPoint.x – label.center.x, rotationPoint.y – label.center.y); CGAffineTransform t1 = CGAffineTransformTranslate(label.transform, transportPoint.x, -transportPoint.y); CGAffineTransform t2 = CGAffineTransformRotate(label.transform,DEGREES_TO_RADIANS(degrees)); CGAffineTransform t3 = CGAffineTransformTranslate(label.transform, -transportPoint.x, +transportPoint.y); CGAffineTransform t4 = CGAffineTransformConcat(CGAffineTransformConcat(t1, t2), t3); label.transform […]