Tag: 核心graphics

在Swift中调用CGPatternCreate

我想知道如何将下面的Objective-C方法转换为Swift函数? CGPatternRef pattern = CGPatternCreate(NULL, rect, CGAffineTransformIdentity, 24, 24, kCGPatternTilingConstantSpacing, true, &callbacks); 我的代码: let callbacks : CGPatternCallbacks = CGPatternCallbacks(version: 0) let pattern : CGPatternRef = CGPatternCreate(nil, rect, CGAffineTransformIdentity, 24, 24, kCGPatternTilingConstantSpacing, true, callbacks) 但是我收到一条错误消息: “CGPatternCallbacks”不能转换为“CConstPointer” 有没有这样的示例代码? 谢谢

UIImageView子类需要处理resize

我正在创build一个UIImageView子类来显示audio波形。 该方法是加载文件,做math,保存一个PNG文件,然后self.image = thePNG 。 关于这个好的部分是在resize或重新绘制UIImageView将拉伸PNG和迅速拉伸。 现在,如果图像扩展得太多,我需要重新计算波形以避免可见的像素化。 既然我们知道UIImageView不会调用drawRect ,那么在resize的时候是否会调用一个方法,以便我可以决定是否需要重画? PS在重新计算时,我将在计算后在新图像中消失 。 希望这对Google Earth等用户来说是无缝的。

CGContextStrokeRect只是绘制矩形的一面

我需要绘制一个充满颜色和边界的矩形…矩形正确填充颜色,但外部边框部分绘制,只是矩形的右侧绘制! 生成的UIImage将被用在UITableViewCell的imageView中。 – (UIImage *)legendItemWithColor:(UIColor *)color { UIGraphicsBeginImageContext(self.view.frame.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGRect outside = CGRectMake(128, 128, 128, 128); CGRect legend = CGRectInset(outside, 1, 1); NSLog(@"Outside: %@", NSStringFromCGRect(outside)); NSLog(@"Legend: %@", NSStringFromCGRect(legend)); CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillRect(context, legend); CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); CGContextStrokeRect(context, outside); UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIGraphicsPopContext(); return img; }

drawRect:速度和CGContextDrawRadialGradient(超慢?)

我有我的UIView子类的drawRect:函数的问题。 我在其中使用CGContextDrawRadialGradient() ,它。 当用户拖动我的UIView时,如果包含渐变的话,它会很难跟上。 使用时间事件探查器我发现,我的时间drawRect 98%是花在我的子类drawRect :方法中的。 第一:会使用一个渐变的静态图像更快? 第二:有什么办法可以加快速度? 我能以某种方式caching渐变吗? 它不会改变很多,但是绕着它的path和相交它会在你拖动UIView时候改变。 如果有人知道如何使drawRect:的一般指南drawRect:方法不吸所有的CPU周期,这将是可怕的。

CAShapeLayer上的渐变颜色效果

我正在尝试在CAShapeLayer上应用渐变颜色。 为了我写代码, -(void)addCircle{ { // Drawing code UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:125 startAngle:0 endAngle:DEGREES_TO_RADIANS(180) clockwise:NO]; CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; [shapeLayer setFrame: self.frame]; [shapeLayer setPath: [aPath CGPath]]; shapeLayer.lineWidth = 30.0f; [shapeLayer setStrokeColor:[[UIColor redColor] CGColor]]; shapeLayer.fillColor = [[UIColor clearColor] CGColor]; [shapeLayer setMasksToBounds:YES]; CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.startPoint = CGPointMake(0.5,1.0); gradientLayer.endPoint = CGPointMake(0.5,0.0); […]

调用UIView的drawRect时不会被调用

我正在试验高级的Objective-C方法。 我想要实现的是将特定的绘图代码附加到现有的UIView 。 我开始很容易,我继续声明我自己的drawRect方法在一个类别中: @interface UIView (Swizzled) – (void)my_drawRect:(CGRect)rect; @end 然后我在类的实现中调用了UIView的drawRect方法: + (void)load { [self swizzleInstanceMethod:@selector(drawRect:) withMethod:@selector(my_drawRect:) inClass:[UIView class]]; } – (void)my_drawRect:(CGRect)rect { NSLog (@"Test."); } GitHub提供了这个方法的实现,其他所有情况下都可以使用这个方法。 所以根据逻辑,每次调用drawRect ,都应该打印出“Test”。 但它不起作用,我骂的方法永远不会被调用。 我继续发现我在这里做错了什么,但是我越看越,我越相信这个问题在别的地方。 如果drawRect方法甚至没有被调用呢? 我继续试图强制它被称为: view.contentMode = UIViewContentModeRedraw; [view setNeedsDisplay]; 也不行。 所以我的问题是: 在这种情况下如何强制UIView调用drawRect ,甚至是我的swizzled实现? 谢谢!

裁剪UIImage(CoreGraphics,iOS)时的性能问题

我们要做的事情的基本思想是我们有一个大的UIImage,我们想把它分成几块。 该函数的用户可以传递多行和多列,并且图像将被相应地裁剪(即,3行和3列将图像分割成9个)。 问题是,我们遇到性能问题,当试图用CoreGraphics完成这个。 我们需要的最大网格是5×5,完成操作需要几秒钟的时间(注册为用户的滞后时间),这当然远非最佳。 我和我的同事在这方面花了一段时间,并且在网上search失败的答案。 我们都不是非常有经验的核心graphics,所以我希望在代码中有一些愚蠢的错误,将解决我们的问题。 这是留给你,所以用户,请帮助我们搞清楚! 我们使用http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/上的教程来修改我们的代码。 下面的function: -(void) getImagesFromImage:(UIImage*)image withRow:(NSInteger)rows withColumn:(NSInteger)columns { CGSize imageSize = image.size; CGFloat xPos = 0.0; CGFloat yPos = 0.0; CGFloat width = imageSize.width / columns; CGFloat height = imageSize.height / rows; int imageCounter = 0; //create a context to do our clipping in UIGraphicsBeginImageContext(CGSizeMake(width, height)); CGContextRef currentContext = […]

iOS Core Graphics如何清除绘图

我正在关注我的涂鸦应用程序的教程。 http://www.raywenderlich.com/18840/how-to-make-a-simple-drawing-app-with-uikit 他的擦除function是使用白色的绘图。 但我正在使用图像背景,当我擦除时,我真的需要擦除。 我努力了 CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear); 但它不工作。 这是我的代码: – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { _mouseSwiped = NO; UITouch *touch = [touches anyObject]; _lastPoint = [touch locationInView:self.tempImageView]; } – (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { _mouseSwiped = YES; UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self.tempImageView]; UIGraphicsBeginImageContext(self.tempImageView.frame.size); [self.tempImageView.image drawInRect:CGRectMake(0, 0, self.tempImageView.frame.size.width, self.tempImageView.frame.size.height)]; CGContextMoveToPoint(UIGraphicsGetCurrentContext(), _lastPoint.x, […]

在某些angular度的连接线有尖顶而不是圆angular

我的应用程序允许您使用各种工具绘制。 其中一个让你做出一个angular度:你点击三次,然后为你画一个angular度。 不幸的是,它变得非常尖锐,但由于某种原因而在某些angular度再次变圆。 我在用着 CGContextSetLineCap(context, kCGLineCapRound); 下面是一张照片来举例说明我在说什么: 有谁知道是什么原因或如何解决它,所以它是所有的时间? 在大多数情况下,我所做的只是: CGContextMoveToPoint(context, first.x, first.y); CGContextAddLineToPoint(context, second.x, second.y); CGContextAddLineToPoint(context, third.x, third.y); 然后中风。

如何设置一个上下文到NSString drawAtPoint?

我目前正在封装许多[NSString drawAtPoint:withFont:]函数调用一个方法,以便我可以通过一次调用绘制大量的string,但我怎么能告诉方法在哪里绘制这些string? 如果我将CGContextRef传递给它,如何将CGContextRef设置为当前上下文呢?