Tag: 核心graphics

setNeedsDisplayInRect:导致整个视图被更新

我正在使用CoreGraphics进行渲染的绘画应用程序。 我的问题是,为了提高性能,我试图限制只更新视图的某些部分已经改变。 为此,我使用setNeedsDisplayInRect :,但有时视图更新其整个内容,导致口吃。 这在第三代iPad上尤其明显,但在模拟器和iPad2中也会发生较小的变化。 我正试图消除这种行为。 为了展示这个问题,我使用Xcode中的模板创build了一个简单的“单一视图”项目。 创build一个自定义的UIView子类,我将其设置为xib文件中的视图控制器的视图。 将此添加到UIViewController: – (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { // Asks that the view refreshes a smal rectangle [self.view setNeedsDisplayInRect:CGRectMake(10, 10, 20, 20)]; } 将此添加到MyView(我的自定义视图)中: – (void)drawRect:(CGRect)rect { // Just log what is being updated NSLog(@"%@", NSStringFromCGRect(rect)); } 就是这样。 如果我在第三十台iPa​​d(实际设备)上运行该应用程序,则日志会显示该视图时常重新绘制其自身(如非常频繁地)。 这太令人沮丧了,而且我没有想法 更新:这里有一些日志。 它绝对显示有时更新的全景。 我试图让它完全停止,但不能如何… 2012-05-04 08:34:01.851 TestUpdateArea[45745:707] {{0, 0}, […]

检测多边形内的CGPoint

我有一组构成多边形的CGPoint,我怎么能检测到一个CGPoint是在多边形的内部还是外部? 说,形状是一个三angular形,CGPoint是hoizontally移动,我怎么能检测当它越过三angular线? 我可以使用CGRectContainsPoint当形状是一个常规的四面形状,但我不明白我将如何做一个奇怪的形状。

animationCAShapeLayer派

我正在尝试使用CAShapeLayer创build一个简单的animation饼图。 我希望它从0到提供的百分比animation。 要创build形状图层我使用: CGMutablePathRef piePath = CGPathCreateMutable(); CGPathMoveToPoint(piePath, NULL, self.frame.size.width/2, self.frame.size.height/2); CGPathAddLineToPoint(piePath, NULL, self.frame.size.width/2, 0); CGPathAddArc(piePath, NULL, self.frame.size.width/2, self.frame.size.height/2, radius, DEGREES_TO_RADIANS(-90), DEGREES_TO_RADIANS(-90), 0); CGPathAddLineToPoint(piePath, NULL, self.frame.size.width/2 + radius * cos(DEGREES_TO_RADIANS(-90)), self.frame.size.height/2 + radius * sin(DEGREES_TO_RADIANS(-90))); pie = [CAShapeLayer layer]; pie.fillColor = [UIColor redColor].CGColor; pie.path = piePath; [self.layer addSublayer:pie]; 然后animation我使用: CGMutablePathRef newPiePath = CGPathCreateMutable(); CGPathAddLineToPoint(newPiePath, NULL, […]

如何以编程方式绘制三angular形

我有一个三angular形求解器,我想要一个方法来使用我从答案中得到的值在与之匹配的屏幕上绘制一个三angular形。

IOS:animation从一条线到贝塞尔曲线的变换

我想创build一条弯曲成贝塞尔曲线(从“_”到“n”)的直线,有没有一个库可以帮助我做到这一点? 我知道如何用UIBezierPath绘制一条贝塞尔曲线,我可以快速重绘,并逐步进行转换,但是如果已经有这样的事情,那就太酷了:-)

Quartz 2D drawRect方法(iPhone)

我有4种不同的iPhone / Cocoa / Core Animation / Objective-C书籍,还有很多来自networking的示例代码。 然而,不知何故,我仍然觉得我错过了一些关于如何在Quartz 2D中进行绘图的基本知识。 drawRect()意味着只是一个钩子来执行您的绘图代码? 或者,这种方法是否也应该重新绘制“已损坏”的区域,并且需要重新绘制? 我可以只画一次,然后“粘住”,或者我必须通过drawRect()随时重绘整个场景吗? Java的Graphics2D对象是这样工作的 – 每次调用paint()时都必须绘制整个“图像”,因此您必须随时准备重新构build它(或caching它)。 你将如何实现一个简单的绘图程序? 你将不得不“记住”用户绘制的每一行/点/笔画,并且每次调用drawRect()时drawRect()复制这个笔画? 如何“离屏”渲染; 你可以做所有的绘画,然后调用[self setNeedsDisplay]让你的写入刷新到屏幕上? 让我们说,为了响应用户的触摸,我想在他触摸的屏幕上放置一个“X”。 X应保持在那里,每个新的触摸产生另一个X.我是否需要记住所有这些触点坐标,然后将它们全部绘制在drawRect() ? 编辑: 除非我误解,joconor和Hector Ramos的回答是相互矛盾的。 这很好地certificate了我对这个问题的困惑。 🙂

在UIImageView上添加一个圆形遮罩层

我正在构build一个照片滤镜应用程序(如Instagram,Camera +等等),主屏幕可能是一个UIImageView ,向用户展示图像,底部有一些滤镜和其他选项。 其中一个选项是模糊 ,用户可以用手指捏住或移动一个代表非模糊部分(半径和位置)的圆圈 – 该圆圈外的所有像素都会模糊。 当用户触摸屏幕时,我想在表示模糊部分的图像上方添加一个半透明图层,并使用完全透明的圆圈表示非模糊部分。 所以我的问题是,我如何添加此图层? 我想我需要在我的图像视图上方使用一些视图,并使用一些蒙版来获得我的圆形状? 我真的很感激这里的一个很好的提示。 还有一件事 我需要的圆不会被直截了,而是有一种渐变的淡入淡出。 像Instagram的东西: 最重要的是要获得这个效果,我会用drawRect:获得这个效果drawRect:但是旧设备(iphone 4,iPod)的性能非常糟糕,

多点触控追踪问题

我正在使用多点触控书写,所以基本上我正在做的是,我手写支持,因为通常,它的用户权限,我跟着这个链接如何忽略多点触控顺序中的某些UITouch点 所以,我正在做的是,我正在touchesBegan中跟踪一个touch对象,并且只在touchesMoved中使用它。一切工作正常,但是在写一些时候,我得到了这一行 在上图中,您可以看到用手触摸屏幕时突然出现的粗线 这是代码 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Touches began"); UITouch* topmostTouch = self.trackingTouch; for (UITouch *touch in touches) { bufIdx = 0; isFirstTouchPoint = YES; ctr = 0; pts[0] = [touch locationInView:self]; if(!topmostTouch || [topmostTouch locationInView:self].y > pts[0].y) { topmostTouch = touch; //touchStartPoint1 = pts[0]; } else { pts[0] = pts[3]; } } […]

跟踪多点触控中的触摸点

我正在开发一个绘图工程,我想支持多点触控,我已经通过在线文档,build议跟踪接触点,我做到了,但我没有得到所需的行为。 我没有得到直线。 以下是我的代码 – (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. red = 0.0/255.0; green = 0.0/255.0; blue = 0.0/255.0; brush = 10.0; opacity = 1.0; self.view.multipleTouchEnabled = YES; touchPaths = [NSMutableDictionary dictionary]; } – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) […]

我的绘图代码如何保持模糊形状?

无论我做什么,我似乎都无法弄清楚为什么我的图像在iOS显示屏上显得模糊不清。 无论是我在图像编辑器还是绘图代码中创build的都不重要,但是我认为代码会使问题更容易parsing。 我知道,如果行是1像素宽,它会显得模糊,但我尝试了多个线宽的大小和类似的结果。 我能做些什么来确保我的graphics看起来很锐利? UIGraphicsBeginImageContext(CGSizeMake(1000, 1000)); UIBezierPath *bezier = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 1000, 1000)]; [[UIColor greenColor]set]; [bezier fill]; [[UIColor blackColor]set]; bezier = [UIBezierPath bezierPath]; [bezier setLineWidth:1.5]; //I tried .5, 1, 1.5, & 2 with similar results [bezier moveToPoint:CGPointMake(450, 500)]; [bezier addLineToPoint:CGPointMake(500, 400)]; [bezier addLineToPoint:CGPointMake(550, 500)]; [bezier closePath]; [bezier stroke]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();