Реализация эффекта слайда для UIView - PullRequest
1 голос
/ 26 марта 2011

All

Я отчаянно пытаюсь написать метод, который будет анимировать добавление подпредставления в виде эффекта «скольжения вверх», когда вид скользит по экрану с определенной точки. Я могу заставить работать UIImageView, но у меня есть куча времени, применяя его к UIPickerView. Что происходит, так это то, что UIPickerView перемещается и анимируется только на 1/4 своей высоты. UIImageView действительно начинается с высоты 0 и скользит вверх на экран.

Вот мой код:


+ (void) slideupView:(UIView*) view duration:(CGFloat) duration completion:(void (^)(BOOL 
                                     finished)) completion {
    CGRect endBounds = view.bounds;
    CGRect startBounds = endBounds;

    startBounds.size.height = 0;

    view.bounds = startBounds;
    view.contentMode = UIViewContentModeTop;
    view.clipsToBounds = YES;
    view.layer.anchorPoint = CGPointMake(0.5, 1.0); 

    CGPoint pos = view.layer.position;
    pos.y += (endBounds.size.height / 2);
    view.layer.position = pos;

    [UIView animateWithDuration:duration delay:0.0        
                 options:UIViewAnimationOptionAllowUserInteraction
         animations:^{
             view.bounds = endBounds;
         }
         completion:completion];
}

Из того, что я прочитал, звучит так, что рекомендуется использовать прямоугольник границ вместо рамки, поскольку подход с рамками не будет работать, если вы изменили преобразование.

Я также читал, что нельзя изменить высоту UIPickerView, поэтому мне интересно, является ли это причиной этой проблемы. По общему признанию, я не пробовал это на любом другом подклассе UIView.

Есть мысли? Есть ли лучший подход? Я просто хочу анимировать вид на экран, аналогично представлению модального вида контроллера, за исключением того, что я не хочу, чтобы он покрывал весь экран. Я просто хочу эффект слайда, например, когда на экране появляется клавиатура.

Спасибо! Justin

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Если вы просто хотите сдвинуть ваш вид вверх, как при приближении клавиатуры, то вы можете сделать это, изменив координату y своего вида с помощью анимации.

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f,460.0f,320.0f,260.0f)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:[self view] cache:YES];
[view setFrame:CGRectMake(0.0f,200.0f,320.0f,260.0f)];
[UIView commitAnimations];
0 голосов
/ 26 марта 2011

«Границы» относятся к внутренней системе координат самого представления, тогда как «рамка» и «центр» относятся к позиции представления в системе координат его родителя. Таким образом, чтобы переместить вид на экран, вы захотите анимировать либо рамку, либо центр.

...