Liumx31
Liumx31

Reputation: 1210

UIView animation with sub-subview

So I want to animate a subview of a container view in my main view (essentially a sub subview), should I create another view controller for the subview to control the sub subview or create an outlet in the main view controller for the sub subview? The problem is that I am triggering the animation with a UIButton, which also does some other things, so if I create another view controller, this UIButton would have two IBActions. Anyways, this is the code I have for the animation in the main viewController:

@IBAction func hourSelectorTap(gesture: UITapGestureRecognizer){
    if (isHourSelected){
        let path = UIBezierPath()
        path.moveToPoint(CGPoint(x:100, y:8))
        let anim = CAKeyframeAnimation(keyPath: "MoveZeBox")
        anim.path = path.CGPath
        self.MinHrView.layer.addAnimation(anim, forKey: "Move")
        isHourSelected = !isHourSelected

    } else{

    }

}

Upvotes: 2

Views: 1406

Answers (1)

erparker
erparker

Reputation: 1301

My first question to this would be, why have a container view if you're not placing some subclass of UIViewController in it? The main usage of embedding a view controller is so you can switch out which subclassed UIViewController is currently displaying. If you simply wanted nested views, I would suggest nesting UIViews and going from there.

Essentially the question is, you have some view controller that contains some subview, and you want to animate the subview, right? I would create an IBOutlet, say myView, for the view that I want to animate, and then in my function for the button press, do something like this:

@IBAction func hourSelectorTap(gesture: UITapGestureRecognizer){
 if (isHourSelected){
    UIView.animateWithDuration(0.2, animations: {
        //your animation code here
        self.myView.frame = CGRectMake(50,100,300,300)
    }, completion: {
        //anything you want to do when the animation is complete
    })
 } else {

 }
}

Otherwise, yes, the correct method for handling a view controller that is being embedded in your view is to subclass that view controller and place the code in there.

Upvotes: 1

Related Questions