【问题标题】:How to draw a triangle programmatically如何以编程方式绘制三角形
【发布时间】:2011-07-14 17:42:29
【问题描述】:

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

【问题讨论】:

  • 通过“三角形求解器”我想你的意思是你告诉它三角形的两侧并计算第三个?是直角三角形吗?
  • 有点,我有一种方法可以让用户输入关于任何三角形的任何信息组合。如二边一角,三边,二角一角。还有所有的直角三角形。

标签: iphone ios cocoa-touch quartz-graphics


【解决方案1】:

如果你继承一个 UIView,你可以在 drawRect 中实现类似的东西来绘制一个三角形:

-(void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGContextBeginPath(ctx);
    CGContextMoveToPoint   (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect));  // top left
    CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMidY(rect));  // mid right
    CGContextAddLineToPoint(ctx, CGRectGetMinX(rect), CGRectGetMaxY(rect));  // bottom left
    CGContextClosePath(ctx);

    CGContextSetRGBFillColor(ctx, 1, 1, 0, 1);
    CGContextFillPath(ctx);
}

【讨论】:

  • 我仍然对如何做到这一点感到有些困惑。抱歉,我对编程还是很陌生。
  • 创建一个Objective-C类,它是UIView的子类。在类中实现drawRect:方法,当需要在屏幕上绘制视图时,iOS会调用drawRect:。实例化该类的对象并将其添加到视图控制器的视图中。如果这没有意义,那么也许您应该从this question 获得一些基础知识。
  • 好的,我了解添加 Objective-c 类,但是当用户按下按钮将自定义三角形绘制到屏幕上时,我会调用什么?
  • 您需要使用 addSubview 将三角形视图对象添加到视图控制器,例如 [myViewcontroller.view addSubView:triangleView]; iOS 在正确的时间自动调用 drawRect。
  • 我还做了一些非常有趣的事情来获得合适的比例。我将最长的三角形边除以宽度中点数的 %85,然后将其他边乘以该数字,以使任何三角形完美契合。
【解决方案2】:

Swift 3 相当于progrmr 的回答:

override func draw(_ rect: CGRect) {

    guard let context = UIGraphicsGetCurrentContext() else { return }

    context.beginPath()
    context.move(to: CGPoint(x: rect.minX, y: rect.minY))
    context.addLine(to: CGPoint(x: rect.maxX, y: rect.midY))
    context.addLine(to: CGPoint(x: (rect.minX), y: rect.maxY))
    context.closePath()

    context.setFillColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
    context.fillPath()
}

【讨论】:

    【解决方案3】:
    - (void)drawRect:(CGRect)rect {
    
    
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextClearRect(ctx, rect);
    
        // Draw a triangle
        CGContextSetRGBFillColor(ctx, 255, 160, 122, 1);
    
        CGContextBeginPath(ctx);
        CGContextMoveToPoint   (ctx, 290, 35);  // top
        CGContextAddLineToPoint(ctx, 350, 165);  // right
        CGContextAddLineToPoint(ctx, 230,165);  // left
        CGContextClosePath(ctx);
    
        CGContextSetRGBFillColor(ctx, 1, 1, 1, 1);
        CGContextFillPath(ctx);
    }
    

    【讨论】:

    • 是)))@FelixSFD
    • 这个答案如何为问题增加任何新价值?看起来这只是程序员对硬编码值的回答。也只是纯代码,没有任何解释。
    • 对不起,我是一个初学者,只是想展示我绘制三角形的方法。是的,这是我来自一个项目的代码。也许它会对其他人有所帮助......
    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多