2014-11-07 13 views
9

Kullanıcı, üzerine dokunduğunda düzensiz bir şekli vurgulamalıyım. Nasıl yapılacağına dair fikrim, şekle uyan, onu bir renkle dolduran ve saydamlığını değiştirmek için opaklığı değiştiren çokgen çizmekti. Ne yazık ki bunun nasıl yapılacağı hakkında bir şey bulamıyorum. Esasen, doldurulmuş çokgen çizmek, haritanın üzerine yerleştirmek ve sonra onu reddedebilmek (veya gizleyebilmek) istiyorum. Bunu nasıl başarabilirim?Swift'de Çizim Poligonları

+0

Sen ondan bir fikir sahibi olabilirim Amaç C ile yazılmış bu mac app bakın. – Sandeep

+0

Şeklini drawRect'te çizebilirsin: (UIBezierPath kullanarak) veya bir görünüm oluşturup görünüm katmanına eklediğiniz bir CAShapeLayer'a bir bezier yolu ekleyin. – rdelmar

cevap

27

Büyük olasılıkla bir CAShapeLayer kullanmak istersiniz. İşte bir demo:

import XCPlayground 
import UIKit 
import CoreText 

let view = UIView(frame: CGRectMake(0, 0, 300, 300)) 
XCPShowView("view", view) 

let imageView = UIImageView(image: UIImage(named: "profile.jpg")) 
imageView.frame = view.bounds 
imageView.contentMode = UIViewContentMode.ScaleAspectFill 
view.addSubview(imageView) 

let shape = CAShapeLayer() 
view.layer.addSublayer(shape) 
shape.opacity = 0.5 
shape.lineWidth = 2 
shape.lineJoin = kCALineJoinMiter 
shape.strokeColor = UIColor(hue: 0.786, saturation: 0.79, brightness: 0.53, alpha: 1.0).CGColor 
shape.fillColor = UIColor(hue: 0.786, saturation: 0.15, brightness: 0.89, alpha: 1.0).CGColor 

let path = UIBezierPath() 
path.moveToPoint(CGPointMake(120, 20)) 
path.addLineToPoint(CGPointMake(230, 90)) 
path.addLineToPoint(CGPointMake(240, 250)) 
path.addLineToPoint(CGPointMake(40, 280)) 
path.addLineToPoint(CGPointMake(100, 150)) 
path.closePath() 
shape.path = path.CGPath 

Sonuç: 3

demo

Swift:

let shape = CAShapeLayer() 
cell.layer.addSublayer(shape) 
shape.opacity = 0.5 
shape.lineWidth = 2 
shape.lineJoin = kCALineJoinMiter 
shape.strokeColor = UIColor(hue: 0.786, saturation: 0.79, brightness: 0.53, alpha: 1.0).cgColor 
shape.fillColor = UIColor(hue: 0.786, saturation: 0.15, brightness: 0.89, alpha: 1.0).cgColor 

let path = UIBezierPath() 
path.move(to: CGPoint(x: 120, y: 20)) 
path.addLine(to: CGPoint(x: 230, y: 90)) 
path.addLine(to: CGPoint(x: 240, y: 250)) 
path.addLine(to: CGPoint(x: 100, y: 150)) 
path.close() 
shape.path = path.cgPath 
+0

Mükemmel! Tam olarak aradığım şey! Teşekkürler! –