Hide and show scrollview with animation

2019-07-28 15:15发布

问题:

In my app I have a scrollview and when I press a button it is hidden when I press again it shows up.

I use scrollview.hidden = YES (or NO) to do it.

But I want to do it with an animation. For example, it may disappear from the bottom of the screen by moving and shows up with the same way. How can I do that?

edit:

[UIView beginAnimations:@"myAnimation" context:nil];
CGRect Frame = bottomScroller.frame;
if(Frame.origin.y == 380){
    Frame.origin.y = 460;
}else{
    Frame.origin.y = 380;
}
bottomScroller.frame = Frame;
[UIView commitAnimations];

This solved my problem...

回答1:

You may check UIView animations. It's pretty easy. For example to animate translation you may use something like:

[UIView beginAnimations:@"myAnimation" context:nil];
CGRect Frame = yourView.frame;
Frame.origin.y = 0;
yourView.frame = Frame;
[UIView commitAnimations];

Then to move it back:

[UIView beginAnimations:@"myAnimation" context:nil];
CGRect Frame = yourView.frame;
Frame.origin.y = 100;
yourView.frame = Frame;
[UIView commitAnimations];

Changes in frame, alpha and some other parameters will be automatically animated.



回答2:

You can use animations like so:-

[UIView animateWithDuration:2.0 animations:^{
     [scrollview setframe:CGRectMake(xpos, ypos, width, height)];
}];

If you want to slide the scrollview on or off the screen set its y position - the bottom of the view is you want to hide it, the normal y position if you want to show it.

The 2.0 is an animation length, this can be changed to whatever you need it to be!



回答3:

You can do this by using simple view animations. Here's an example of how you might do this:

// myScrollView is your scroll view

-(void)toggleShow{
    CGFloat targetAlpha = myScrollView.alpha == 1 ? 0 : 1;
    CGFloat yPosition = targetAlpha == 1 ? 0 : self.view.frame.size.height;

    [UIView animateWithDuration:1.0 animations:^{
        myScrollView.frame = CGRectMake(myScrollView.frame.origin.x, yPosition, myScrollView.frame.size.width, myScrollView.frame.size.height);
        myScrollView.alpha = targetAlpha;
    }];
}

targetAlpha will always be the opposite of the current state (1 or 0), and if it's 0 then the y position will be set to the bottom of the parent view. Using the new-school UIView animations API with blocks we can execute these changes to the scroll view over 1 second (in my example).



回答4:

ScrollView appers from down side of screen with animation. I think this up-animation is what you want.

// ScrollView appearing animation
- (void)ScrollViewUpAnimation
{
    // put the scroll view out of screen
    CGRect frame = ScrollView.frame;
    [self.view addSubview:ScrollView];
    ScrollView.frame = CGRectMake(0, 460, frame.size.width, frame.size.height);

    // setting for animation
    CGPoint fromPt = ScrollView.layer.position;
    CGPoint toPt = CGPointMake(fromPt.x, fromPt.y - frame.size.height - 44);
    CABasicAnimation* anime =
    [CABasicAnimation animationWithKeyPath:@"position"];
    anime.duration = 0.2;
    anime.fromValue = [NSValue valueWithCGPoint:fromPt];
    anime.toValue = [NSValue valueWithCGPoint:toPt];

    // change the position of Scroll View when animation start
    [ScrollView.layer addAnimation:anime forKey:@"animatePosition"];
    ScrollView.layer.position = toPt;
}