Swift: Afbeelding Het verliezen van Aspect Ratio bij het opstellen Begint

stemmen
0

Ik probeer om het bewerken van een VC voor mijn app te maken en in aanraking met de bovenstaande probleem. Wanneer ik beginnen met het tekenen op mijn beeld, zou het beeld vervormen en verliezen dan het aspect ratio.

Gif als zodanig:

voer

Mijn volledige code als zodanig:

class DrawImageController: UIViewController {

    var canvasImageView: UIImageView = {
        let iv = UIImageView()
        iv.translatesAutoresizingMaskIntoConstraints = false
        iv.backgroundColor = .yellow
        iv.contentMode = .scaleAspectFit
        return iv
    }()

    var lastTouch = CGPoint.zero

    override func viewDidLoad() {
        super.viewDidLoad()
        setupViews()
    }

    func setupViews() {
        view.backgroundColor = .black

        view.addSubview(canvasImageView)

        canvasImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        canvasImageView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        canvasImageView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        canvasImageView.heightAnchor.constraint(equalToConstant: 300).isActive = true

        canvasImageView.image = UIImage(named: testImage)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let firstTouch = touches.first {
            lastTouch = firstTouch.location(in: canvasImageView)
        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let firstTouch = touches.first {
            let touchLocation = firstTouch.location(in: canvasImageView)
            drawLine(from: lastTouch, to: touchLocation)
            lastTouch = touchLocation
        }
    }

    func drawLine(from: CGPoint, to: CGPoint) {
        UIGraphicsBeginImageContext(canvasImageView.frame.size)

        if let context = UIGraphicsGetCurrentContext() {
            canvasImageView.image?.draw(in: CGRect(x: 0, y: 0, width: canvasImageView.frame.size.width, height: canvasImageView.frame.size.height))

            context.move(to: from)
            context.addLine(to: to)

            context.setLineCap(.round)
            context.setLineWidth(5.0)
            context.setStrokeColor(UIColor.blue.cgColor)

            context.strokePath()

            let image = UIGraphicsGetImageFromCurrentImageContext()
            canvasImageView.image = image
            UIGraphicsEndImageContext()
        }          
    }
}

Ik aangepast mijn methode draw uit verschillende tutorials op youtube, GitHub en SO. Zou iemand advies waar zou ik mis pls gegaan? Bedankt.

De vraag is gesteld op 02/09/2018 om 04:57
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Het probleem is hier:

canvasImageView.image?.draw(in: CGRect(x: 0, y: 0, width: canvasImageView.frame.size.width, height: canvasImageView.frame.size.height))

Je tekent het beeld met behulp van het frame van het beeld standpunt van. Dit rekt het beeld.

Je moet om het beeld te tekenen alsof contentMode is .scaleAspectFit.

(: H B) Hiervoor eerste aspect-verhouding van de afbeelding te bepalen. U kunt dit doen door de toegang van de sizeeigendom van UIImage. Vergelijk deze verhouding om de beeldverhouding van het beeld uitzicht.

Wanneer de verhouding van de afbeelding is kleiner dan van de weergave, dan betekent dat de hoogte waarop de afbeelding tekenen kan hetzelfde zijn als de beeldhoogte weergave, en de beeldbreedte kan worden berekend met de aspectverhouding van het beeld.

Wanneer de verhouding van de afbeelding groter is dan van de weergave, dan betekent de breedte waarop de afbeelding tekenen kan hetzelfde zijn als de breedte van weergave, en de beeldhoogte berekenen,

antwoordde op 02/09/2018 om 07:51
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more