Borut
Borut

Reputation: 8138

Resize view right-to-left with animation on iOS

I would like to resize UIView from right side to left (opposite). Now I have view with rect like this: CGRectMake(100.f, 0.f, 100.f, 100.f);

[UIView animateWithDuration:0.5 animations:^{
  view.frame = CGRectMake(0.f, 0.f, 200.f, 100.f);
}];

The problem is that animation is not nice. It bounces to the right (gets bigger) and than moves to location 0.0,0.0.

I would like to achieve the same effect like when resizing from left to right.

EDIT: code

- (void)resizeSearchBar:(int)type
{
    //resize - bigger
    if (type == 1) {
        [UIView animateWithDuration:1.0 animations:^{
            self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
        }];
    }
    //resize - smaller
    else {
        [UIView animateWithDuration:1.0 animations:^{
            self.searchBar.frame = CGRectMake(95.f, 0.f, 185.f, 44.f);
        }];
    }
}

EDIT 2

I've also tried to change View properties in IB like that: enter image description here

Still no luck...

Upvotes: 2

Views: 3218

Answers (3)

Pritam Barhate
Pritam Barhate

Reputation: 775

Got it to work with the hint from this answer: Can't animate the frame or bounds of a UISearchBar

The trick is to call [searchBar layoutSubviews]; in your animation block after setting the frame.

Here is what I got to work in my sample:

- (IBAction)resizeButtonTapped:(id)sender {
    //resize - bigger
    if (searchBar.frame.origin.x == 95) {
        [UIView animateWithDuration:1.0 animations:^{
            self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
            [searchBar layoutSubviews];
        }];
    }
    //resize - smaller
    else {
        [UIView animateWithDuration:1.0 animations:^{
            self.searchBar.frame = CGRectMake(95.f, 0.f, 185.f, 44.f);
            [searchBar layoutSubviews];
        }];
    }

}

Upvotes: 7

Lithu T.V
Lithu T.V

Reputation: 20021

It bounces because the duration is much less!!

Increase the duration ..and i think it will make it more clear how it animates

K try this

[UIView animateWithDuration:1.0 
                  delay:0.0 
                options:UIViewAnimationCurveEaseInOut 
             animations:^ {

     self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
             } 
             completion:^(BOOL finished) {

             }];

Chk here for Options

Upvotes: 0

Paras Joshi
Paras Joshi

Reputation: 20551

I think this is useful to you just see bellow demo link...

https://github.com/ipup/PPRevealSideViewController?_tmc=UFw1P_Ai9brJd4WEpSlPbNrXBWOvsYZ6gNPi_derQik

i hope this help you.. :)

edited...

[UIView animateWithDuration:0.5
                          delay:4.0
                        options: UIViewAnimationOptionTransitionCrossDissolve
                     animations:nil
                     completion:^{
                         view.frame = CGRectMake(0.f, 0.f, 200.f, 100.f);}];

not sure but try this and also use different Animation like "UIViewAnimationOptionTransitionCrossDissolve",etc.... hope this help you....

Upvotes: 0

Related Questions