Gambar UIView berdasarkan CGPoint di layar

Saya memiliki empat lingkaran kecil di layar dalam posisi acak. Lingkaran kecil ini bisa berada dimana saja pada layar dan berada di depan MapView.

masukkan deskripsi gambar di sini

Bagaimana cara membuat bentuk berdasarkan lingkaran tersebut?

masukkan deskripsi gambar di sini

Selain itu, pengguna dapat menekan Tombol untuk mengubah posisi lingkaran secara acak, sehingga bentuknya harus dibuat ulang.

masukkan deskripsi gambar di sini

Sejauh ini, saya membaca tentang UIBezierPath dan saya dapat membuat bentuk berdasarkan titik tetapi saya tidak dapat melakukannya secara dinamis.

UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint: CGPointMake(52, 33)];
[bezierPath addLineToPoint: CGPointMake(145, 19)];
[bezierPath addLineToPoint: CGPointMake(158, 79)];
[bezierPath addLineToPoint: CGPointMake(66, 103)];
[UIColor.grayColor setFill];
[bezierPath fill];

person isaiasmac    schedule 13.02.2016    source sumber
comment
Anda harus melihat lebih dekat tutorial Core Graphics, seperti ini: raywenderlich.com/32283/ Objek CGContextRef akan membantu Anda mencapai apa yang Anda inginkan   -  person Randy    schedule 14.02.2016
comment
Terima kasih Randy atas tanggapan Anda. Saya sudah membaca tutorialnya, tapi tetap saja saya tidak bisa melakukannya.   -  person isaiasmac    schedule 17.02.2016


Jawaban (1)


Yang dapat Anda lakukan adalah menambahkan UIImageView dengan warna latar belakang transparan sebagai subview dari MapView Anda (tampilan gambar harus memiliki bingkai yang sama dengan tampilan peta Anda).

Di viewDidLoad, Anda dapat memulai imageContext, menggunakan :

UIGraphicsBeginImageContext(self.imageView.frame.size)

Kemudian, Anda dapat menggambar garis di antara titik-titik Anda, menggunakan CGMutablePath :

func drawLines()
    {
        let point1 = CGPointMake(20, 100)
        let point2 = CGPointMake(230, 150)
        let point3 = CGPointMake(40, 340)

        let points = [point1, point2, point3]

        let context = UIGraphicsGetCurrentContext()
        CGContextClearRect(context, self.imageView.frame)

        let pathRef = CGPathCreateMutable();

        for var i = 0; i < points.count; i++
        {
            let point = points[i]

            if i == 0
            {
                CGPathMoveToPoint(pathRef, nil, point.x, point.y)
            }
            else
            {
                CGPathAddLineToPoint(pathRef, nil, point.x, point.y)
            }
        }

        CGContextSetLineWidth(context, 5.0)
        CGPathCloseSubpath(pathRef)
        CGContextAddPath(context, pathRef);
        CGContextSetStrokeColorWithColor(context, UIColor.brownColor().CGColor)
        CGContextStrokePath(context)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        self.imageView.image = image
    }

Tentu saja, Anda harus menyesuaikan metode ini dengan kebutuhan Anda, namun ini akan bekerja secara dinamis.

Ini bukan satu-satunya solusi. Jika Anda ingin mengenal Core Graphics lebih jauh, Anda harus membaca beberapa dokumentasi. Ini bisa sangat kuat.

person Randy    schedule 14.02.2016