2017-03-03 10 views
-1

私はサークルを描き、ボタンを使ってサブビューとして追加しました。 removefromsuperviewを使用して削除しようとすると、それは消えませんでした。以下のコードを確認してください。ボタンを使用してサブビューを追加して削除する

Removecircleというボタンを追加して、サークルを追加または削除できるようにしましたが、計画通りには行かなかったのです。

import UIKit 
    import GLKit 
    class ViewController: UIViewController { 
    var numb = 0 
    override func viewDidLoad() { 
    super.viewDidLoad() 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

    @IBAction func Removecircle(_ sender: Any) { 
    let radius = Int(view.frame.maxX) 
    let HvalueX = 0 
    let HvalueY = Int(view.frame.maxY)/2 - Int(view.frame.maxX)/2 
    // Create a new CircleView 
    let circleView = CircleView(frame:CGRect(x: HvalueX, y: HvalueY, width: radius, height: radius)) 
    //let test = CircleView(frame: CGRect(x: diceRoll, y: 0, width: circleWidth, height: circleHeight)) 
    if numb%2 == 0 { 
     view.addSubview(circleView) 

     // Animate the drawing of the circle over the course of 1 second 
     circleView.animateCircle(duration: 4.0) 
     circleView.circleLayer.strokeColor = UIColor.blue.cgColor 

    }else if numb%2 == 1 { 

     circleView.removeFromSuperview() 
    } 
    numb = numb + 1 
} 
@IBOutlet weak var removecircle: UIButton! 

} 

class CircleView: UIView { 
var circleLayer: CAShapeLayer! 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    self.backgroundColor = UIColor.clear 

    // Use UIBezierPath as an easy way to create the CGPath for the layer. 
    // The path should be the entire circle. 
    let circlePath = UIBezierPath(arcCenter: CGPoint(x: frame.size.width/2.0, y: frame.size.height/2.0), radius: (frame.size.width - 10)/2, startAngle: 0.0, endAngle: CGFloat(M_PI * 2.0), clockwise: true) 

    // Setup the CAShapeLayer with the path, colors, and line width 
    circleLayer = CAShapeLayer() 
    circleLayer.path = circlePath.cgPath 
    circleLayer.fillColor = UIColor.clear.cgColor 
    circleLayer.strokeColor = UIColor.white.cgColor 
    circleLayer.lineWidth = 3.0; 

    // Don't draw the circle initially 
    circleLayer.strokeEnd = 0.0 

    // Add the circleLayer to the view's layer's sublayers 
    layer.addSublayer(circleLayer) 
    animateCircle(duration: 2) 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func animateCircle(duration: TimeInterval) { 
    // We want to animate the strokeEnd property of the circleLayer 
    let animation = CABasicAnimation(keyPath: "strokeEnd") 

    // Set the animation duration appropriately 
    animation.duration = duration 

    // Animate from 0 (no circle) to 1 (full circle) 
    animation.fromValue = 0 
    animation.toValue = 1 

    // Do a linear animation (i.e. the speed of the animation stays the same) 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 

    // Set the circleLayer's strokeEnd property to 1.0 now so that it's the 
    // right value when the animation ends. 
    circleLayer.strokeEnd = 1.0 

    // Do the actual animation 
    circleLayer.add(animation, forKey: "animateCircle") 
} 


} 

答えて

0

ボタンを押すたびに新しいCircleViewが作成されます。代わりに、最初に作成し、ViewControllerのプロパティとして格納します。ボタンを押すと、removeFromSuperview()でそれを削除できるはずです。

関連する問題