2017-03-03 107 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()将其删除。

相关问题