繁体   English   中英

CGPath不可见

[英]CGPath not visible

我想创建一个CGPath,在概览视角中看起来像一个跟踪。 我在UIView子类中有以下代码。 我知道我正在通过NSLogs输入方法。 CGPath未出现在屏幕上。

- (void)drawRect:(CGRect)rect{
  CGMutablePathRef p = CGPathCreateMutable();
  CGPathMoveToPoint( p, NULL , 150 , 150 );
  CGPathMoveToPoint( p, NULL , 300 , 300 );
  CGPathMoveToPoint( p, NULL , 100 , 150 ) ;
  CGPathMoveToPoint( p, NULL , 150 , 150 );
  CGPathAddLineToPoint( p, NULL , 300 , 300 );
  CGPathAddLineToPoint( p, NULL , 100 , 150 ) ;
  CGPathAddLineToPoint( p, NULL , 150 , 150 );

  CGPathCloseSubpath( p ) ;

  CGContextRef context=UIGraphicsGetCurrentContext(); 
  CGContextBeginPath(context);
  CGContextAddPath ( context, p ) ;
  CGContextSaveGState(context); 

  CGColorRef redColor = [UIColor colorWithRed:1.0 green:12.0 blue:0.0 alpha:0.0].CGColor;
  CGContextSetFillColorWithColor(context, redColor);
  CGContextSetLineWidth(context, 20.0);
  CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

  CGContextStrokePath(context);
  CGContextFillPath ( context ) ;

  CGContextDrawPath(context, kCGPathFill);
  CGContextRestoreGState(context);
}

什么都没有出现提前谢谢

框架确保in -drawRect:已经为您设置了适当的图形上下文并指向显示设备。 如果要设置渲染其他位置(例如图像UIGraphicsBeginImageContext()则只需要UIGraphicsBeginImageContext() / UIGraphicsEndImageContext()

删除这些调用,事情会表现得更好。 现在,您将渲染到屏幕外缓冲区,而不是渲染到视图本身。

编辑:但是,您应该在代码周围添加一对CGContextSaveGState() / CGContextRestoreGState()调用。 如果以某种方式使用-drawRect:这将确保您不会污染其他图形代码的图形上下文。

编辑2:好的,我看到你在上一次回复后已经解决了问题,但为了档案的利益,我要指出你从不直接调用-drawRect:除了一些不适用的模糊案例)这里)。 由于您直接调用它,因此没有设置图形上下文,因此崩溃。 触发重绘的正确方法是发送视图-setNeedsDisplay ; 这将导致框架在运行循环中的适当时间为您设置图形上下文并调用-drawRect:

如果在iOS上,请使用UIBezierPath切换到bezier路径。 肯定会工作。 另外,我注意到,你的每个moveToPoints都在一行中,当他们应该有一个addLineToPoint时,就像这样:

CGPathMoveToPoint(p,NULL,150,150); CGPathAddLineToPoint(p,NULL,300,300);

CGPathMoveToPoint(p,NULL,300,300; CGPathAddLineToPoint(p,NULL,100,150);

CGPathMoveToPoint(p,NULL,100,150); CGPathAddLineToPoint(p,NULL,100,150);

CGPathMoveToPoint(p,NULL,150,150); CGPathAddLineToPoint(p,NULL,150,150);

但是一旦你看到UIBezierPaths有多容易,你就会想要切换到UIBezierPaths。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM