2016-10-17 7 views
0

の最後の時点で:UIImageは、私が怒鳴る画像のようにUIBezierPathの最後の時点でUIImageを追加したいUIBezierPath

Circle Path

コード:

let consume = 0.25 
let x = self.frame.size.width/2.0 
let y = self.frame.size.height/2.0 
let radius = (frame.size.width - 10)/2.0 
let startAngle: CGFloat = CGFloat(M_PI * (-1/2)) 
let endAngle = CGFloat(M_PI * 2 - M_PI/2 * consume) 
let circlePath = UIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false) 

circleLayer = CAShapeLayer() 
circleLayer.path = circlePath.cgPath 
circleLayer.fillColor = UIColor.clear.cgColor 
circleLayer.strokeColor = UIColor.red.cgColor 
circleLayer.lineWidth = 8.0; 

let image = UIImage(named: "myCoolImage") 
let imageView = UIImageView(image: image) 
// coordX and coordY must be at last point of UIBezierPath 
imageView.frame = CGRect(x: coordX, y: coordY, width: 20.0, height: 20.0) 
self.addSubview(imageView) 

私は次のことを試してみました:

let coordX: CGFloat = cos(endAngle) * radius 
let coordY: CGFloat = sin(endAngle) * radius 

結果: Positive coordX and coordY

主な問題は、coordXとcoordYを計算する方法です。

+0

使用したコードでは、何が間違っていますか?あなたは現在どのような結果を見ていますか?欠落しているのは、画像のサイズの負のオフセットです(そのため、画像サイズの位置-x、-y)。 – shortstuffsushi

+0

私は現在の結果で質問を更新しました。負のオフセットを設定すると、画像が画面から消えます。 –

+0

あなたはcoordXとcoordYがあなたにその結果を与えるように設定されている場所にここには表示されていません。ただし、これらの値はxとy_に基づいているので、x/y(中心)+/- cos/sin(角度)に設定する必要があります。これらの変数を設定して、 x/yに? – shortstuffsushi

答えて

1

実際に完全に答えを出すために、ここには基本的に必要なものがあります。

let consume = 0.25 
let x = self.frame.size.width/2.0 
let y = self.frame.size.height/2.0 
let radius = (frame.size.width - 10)/2.0 
let startAngle: CGFloat = CGFloat(M_PI * (-1/2)) 
let endAngle = CGFloat(M_PI * 2 - M_PI/2 * consume) 
let circlePath = UIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false) 

circleLayer = CAShapeLayer() 
circleLayer.path = circlePath.cgPath 
circleLayer.fillColor = UIColor.clear.cgColor 
circleLayer.strokeColor = UIColor.red.cgColor 
circleLayer.lineWidth = 8.0; 

let imageSize = 20.0 
// Center + cos/sin(angle) * radius, then subtract half 
// the image size so it will be centered on the line 
let coordX: CGFloat = x + (cos(endAngle) * radius) - (imageSize/2.0) 
let coordY: CGFloat = y - (sin(endAngle) * radius) - (imageSize/2.0) 

let image = UIImage(named: "myCoolImage") 
let imageView = UIImageView(image: image) 
// coordX and coordY must be at last point of UIBezierPath 
imageView.frame = CGRect(x: coordX, y: coordY, width: imageSize, height: imageSize) 
self.addSubview(imageView) 
関連する問題