开发者

Load a XIB with custom Transition?

开发者 https://www.devze.com 2023-03-09 06:40 出处:网络
Is it possible (at all) to load a XIB with custom AnimationTransition? What I have done, is creating an animation that \"Covers\" the screen, and what I want is that after that animation has done pla

Is it possible (at all) to load a XIB with custom AnimationTransition?

What I have done, is creating an animation that "Covers" the screen, and what I want is that after that animation has done playing, I would like it to display the new XIB.

I cant seem to find any proper solution to this...Any ideas?

To be more clear: Press a button --> Play Animation (cover screen) --> Load XIB.


Hello again! Yes, the last way you described is the way I am doing it. I have two UIViews (Might be wrong already there), that are placed off-bounds on each side, (like x.-160.y.0 and x.320y.0)

-(IBAction) leftDoor{

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    closeDoor1.center = CGPointMake( closeDoor1.center.x +160, closeDoor1.center.y);


    [UIView commitAnimations];

 } 


-(IBAction) rightDoor{

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:U开发者_如何学编程IViewAnimationCurveEaseInOut];

    closeDoor2.center = CGPointMake( closeDoor2.center.x -160, closeDoor2.center.y);

    [UIView commitAnimations];
}

So, what I am going to do is not to "split" the current view and then open a new XIB, the effect I am searching for is a "closing door" effect, thats why I used UIView ( thought I place graphics on top of those, like two ImageViews). Then, for loading the new XIB...This is where im really puzzled. My first way of trying this out was to make three IBActions, including the two I mentioned above, and then apply all three (multiple actions) to a button. So for switching views I did something like this: `-(IBAction) newViewDisplay:(id)sender{

theView *newViewController = [[theView alloc]
                                      initWithNibName:@"theView" bundle:nil]; 

[self.view addSubview:newViewController.view];

} `

As you said, this might be over my head, but if I just got some directions, I´ll walk miles to make this work. It would really give my app a facelift. A huge thanks for taking time to answer my question, All the best/Andy


What are you covering the screen with?

Think of it this way, (it sounds like) you have 2 views, the old one and the new one that is stored in this xib. The animation is secondary.

You need to load the new view, then display it (can be off-screen), then animate it (move it) into the place you want it to go. If you want to split it into two parts, one at the bottom and one at the top of the screen, then meet in the middle, I think that's both complicated and above you skill level. (Not trying to be mean here).

If you are trying to do a split animation as described, it can be done, but you need to 'fake it'. It would involve taking a 'screenshot' (of sorts), splitting it, moving these two images so they meet with an animation, loading the view underneath, and then removing the images. Tricky stuff.

Do you have to have this sort of animation?

If you could post the code you have, I can rearrange it, and add to it, for you.

You'll need to clarify what it is exactly you want to do, though.

UPDATE 3: I added another option for autoreverse.

//You can add both doors into one animation block.

    //Create an animation block. Ease Out is better for this animation but you can change it.
[UIView animateWithDuration:1.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAutoreverse) animations:^{
    closeDoor1.center = CGPointMake( closeDoor1.center.x +160, closeDoor1.center.y);
    closeDoor2.center = CGPointMake( closeDoor2.center.x -160, closeDoor2.center.y);

}completion:^(BOOL finished){
    if (finished) {
            //When finished, create the VC if it doesn't exist, and insert it below the 'closed door'.

        if (newViewController == nil) {
            UIViewController *newViewController = [[UIViewController alloc] initWithNibName:@"theView" bundle:nil]; 
        }

        [self.view insertSubview:newViewController.view belowSubview: closeDoor2];;
        [self.closeDoor1 removeFromSuperview];
        [self.closeDoor2 removeFromSuperview];

    }
}];
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号