如何在iOS中动态绘制圆形,椭圆形,ractangles等形状?

时间:2017-03-31 09:57:06

标签: ios objective-c iphone uiimage core-graphics

我有一个显示圆形,椭圆形,ractangles形状的UICollectionView。因此,当我点击Cell时,我需要在UIView上绘制相同的形状,然后我需要移动并调整通过单击Cell绘制的视图。如何在iOS中实现?提前致谢。

4 个答案:

答案 0 :(得分:2)

如果您使用UICollectionView,您的可重用单元格将具有"层"借鉴。

怎么办?

1。创建一个UIView子类并将其放在可重用的单元格中。

2。覆盖drawRect(_:)方法,您将完成所有绘图。

3. 将您的shape/line drawing code添加到drawRect方法。

例如,对行,弧等使用UIBezierPath类。您将能够创建各种形状。

您应该阅读CoreGraphics API参考:

https://developer.apple.com/reference/coregraphics

还了解LayersContextsdrawRect:

circle的一个非常基本的例子:

class CircleView: UIView {
    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else {
            return
        }
        context.addEllipse(in: rect)
        context.setFillColor(.red.cgColor)
        context.fillPath()
    }
}

并使用UIBezier路径绘制线条(rects,stars等):

override func drawRect(rect: CGRect) {
      var path = UIBezierPath()
      path.moveToPoint(CGPoint(x:<point x>, y:<point y>))
      path.addLineToPoint(CGPoint(x:<next point x>, y:<next point y>))
      point.closePath()

      UIColor.redColor().set()
      point.stroke()
      point.fill()
}

答案 1 :(得分:1)

关于bezier路径的研究。这是可能的。希望它对你有用。

答案 2 :(得分:0)

您可以使用CAShapeLayer。例如。画一个圆圈。

shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = aFrame;
UIBezierPath *spath = [UIBezierPath bezierPathWithArcCenter:centerPoint radius:12 startAngle:0 endAngle:(2 * M_PI) clockwise:YES];
shapeLayer.strokeColor = [UIColor colorWithRed:71/255.0 green:157/255.0 blue:252/255.0 alpha:1].CGColor;
shapeLayer.path = spath.CGPath;
shapeLayer.strokeStart = 0;
shapeLayer.strokeEnd = 0;
shapeLayer.fillColor = nil;
shapeLayer.lineWidth = 2;
[self.layer addSublayer:shapeLayer];

我希望它可以帮到你

答案 3 :(得分:0)

您可以使用图层的属性:

  • cornerRadius
  • 边框宽度
  • BORDERCOLOR