1

UIView でovalInRectを描画するために UIBezierPath を使用していますが、適切に動作していますが、ovalInRectを変更した後に UIView を移動すると、UIView の位置を変更せずに UIView が古い位置になります。

    ellipsePath = UIBezierPath(ovalInRect: CGRectMake(0, 0, radiusValue , radiusValue))

    shapeLayer.path = ellipsePath.CGPath
    shapeLayer.fillColor = UIColor.clearColor().CGColor
    shapeLayer.strokeColor = UIColor.blueColor().CGColor
    shapeLayer.lineWidth = 1
    shapeLayer.sublayers?.removeAll()
    moveView.layer.addSublayer(shapeLayer)


今、moveView で ovalInRect を取得し、UIPanGestureRecognizerの古い場所を使用して画面上の moveView を他の場所に移動します

    func recognizePanGesture(sender: UIPanGestureRecognizer)
    {
    let translate = sender.translationInView(self.view)

    sender.view!.center = CGPoint(x:sender.view!.center.x + translate.x,
        y:sender.view!.center.y + translate.y)
    sender.setTranslation(CGPointZero, inView: self.view)

   }

次に、ovalInRect を更新した後

    ellipsePath.removeAllPoints()

    let tempPath = CGPathCreateMutableCopy(ellipsePath.CGPath)

    CGPathAddEllipseInRect(tempPath, nil, CGRectMake(0
            ,0, topA , rightB))
    ellipsePath.CGPath = tempPath!
    shapeLayer.path = ellipsePath.CGPath
    shapeLayer.sublayers?.removeAll()
    moveView.layer.addSublayer(shapeLayer)

moveView は古い位置に自動的に移動します (ovalInRect は適切に機能します)。

ovalInRect 時間を更新するときに位置を変更しないでください。

4

0 に答える 0