ios - tutorial - xcode




Cómo dibujar una línea de la manera más sencilla en swift. (7)

Soy bastante nuevo en Swift y Xcode y estoy tratando de hacer un juego de tres en raya. Tengo todo resuelto, excepto cómo dibujar una línea a través de las tres x o las o. No tengo idea de cómo dibujar líneas. He buscado en la web la respuesta y no puedo entenderlo. ¿Alguien puede ayudar?

Gracias por delante


¿Estás utilizando SpriteKit? De lo contrario, deberías hacerlo con cualquier tipo de juegos de iOS, ya que facilita mucho la manipulación y la adición de sprites (imágenes) y otros objetos de estilo de juego.

Si bien no es la mejor manera de codificar las mejores prácticas, una forma muy simple de lograr esto sería crear una nueva vista cuando alguien gana, verifique en qué dirección (de las 8 posibles) está la fila y luego configure la Imagen de esta vista en consecuencia. Las imágenes serían cuadrados semitransparentes (p. Ej., PNG) cada uno con una línea diferente posible.

Si quieres hacerlo de la manera correcta, investiga cómo dibujar caminos en SpriteKit entre coordenadas.

¡Espero que esto sea de alguna ayuda! Steve


Actualización para Swift 3.x usando el ejemplo de Epic Defeater

override func draw(_ rect: CGRect) {
        let aPath = UIBezierPath()

        aPath.move(to: CGPoint(x:20, y:50))

        aPath.addLine(to: CGPoint(x:300, y:50))

        //Keep using the method addLineToPoint until you get to the one where about to close the path

        aPath.close()

        //If you want to stroke it with a red color
        UIColor.red.set()
        aPath.stroke()
        //If you want to fill it as well
        aPath.fill()
    }

En general, tienes que dibujar una ruta en Core Graphics. Puedes seguir este ejemplo:

let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 2.0)
CGContextSetStrokeColorWithColor(context, color)
CGContextMoveToPoint(context, startPoint)
CGContextAddLineToPoint(context, endPoint)
CGContextStrokePath(context)

Implementación simple de SWIFT 4.1 :

public override func draw(_ rect: CGRect) {
    guard let context = UIGraphicsGetCurrentContext() else { return }
    let lineWidth: CGFloat = 1.0
    context.setLineWidth(lineWidth)
    context.setStrokeColor(UIColor(style: .tertiaryBackground).cgColor)
    let startingPoint = CGPoint(x: 0, y: rect.size.height - lineWidth)
    let endingPoint = CGPoint(x: rect.size.width, y: rect.size.height - lineWidth)
    context.move(to: startingPoint )
    context.addLine(to: endingPoint )
    context.strokePath()
}

Obviamente, necesitas ajustar el punto de inicio y final.


Respuesta de Epic Defeater actualizada a Swift 4.1

   func drawRect(rect: CGRect) {
        var aPath = UIBezierPath()

        aPath.move(to: CGPoint(x:/*Put starting Location*/, y:/*Put starting Location*/))

        aPath.addLine(to: CGPoint(x:/*Put Next Location*/, y:/*Put Next Location*/))

        //Keep using the method addLineToPoint until you get to the one where about to close the path

        aPath.close()

        //If you want to stroke it with a red color
        UIColor.red
        aPath.stroke()
        //If you want to fill it as well
        aPath.fill()
    }

También he estado luchando en este tema. En XCode 7.3.1, con Swift versión 2.2, la forma más sencilla de dibujar una línea es crear un área de juegos e insertar este código en ella. Espero que esto ayude a otras personas con esta simple tarea en mente.

import UIKit
import XCPlayground

public class SimpleLine: UIView  {

    public init() {
        super.init(frame: CGRect(x: 0, y: 0, width: 480, height: 320))
        backgroundColor = UIColor.whiteColor()
    }

    public required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    public override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        CGContextSetLineWidth(context, 4.0)
        CGContextSetStrokeColorWithColor(context, UIColor.darkGrayColor().CGColor)
        CGContextMoveToPoint(context, 100, 100)
        CGContextAddLineToPoint(context, 300, 300)
        CGContextStrokePath(context)
    }

}

let firstLine = SimpleLine()

XCPlaygroundPage.currentPage.liveView = firstLine

Swift 3.1 , dentro de una vista:

public override func draw(_ rect: CGRect) {
    let context = UIGraphicsGetCurrentContext()
    context!.setLineWidth(2.0)
    context!.setStrokeColor(UIColor.red.cgColor)
    context?.move(to: CGPoint(x: 0, y: self.frame.size.height))
    context?.addLine(to: CGPoint(x: self.frame.size.width, y: 0))
    context!.strokePath()
}

Si desea agregar una línea a un UIViewController, simplemente agregue una UIView con esta función como una subvista al UIViewController, ei:

let line = LineView(CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
self.view.addSubview(line)




swift