iOS с использованием частичного скручивания страницы в UIView, а не в UIViewController - PullRequest
1 голос
/ 18 октября 2011

У меня есть MainViewController, который имеет много подпредставлений. В основном, это разбито на две части. Панели имеют вид буфера обмена. Я хотел бы нажать кнопку и сделать так, чтобы «бумага» на одном из буферов обмена частично свернулась, чтобы показать страницу внизу.

Это не полная ситуация презентации модального ViewController.

Я работаю со следующим кодом, но результаты прикольные:

    FlipView *flipView = [[FlipView alloc] init];
    [self setFlipView:flipView];
    [flipView setHidden:YES];
    [flipView setFrame:[[self WhereAmI] frame]];
    [[self view] addSubview:flipView];
    [[self view] bringSubviewToFront:[self WhereAmI]];
    [flipView setHidden:NO];
    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];
    [animation setDuration:1.0];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    [animation setType:@"pageCurl"];
    [animation setFillMode:kCAFillModeForwards];
    [animation setEndProgress:0.9];
    [animation setRemovedOnCompletion:NO];
    [[self WhereAmI] setHidden:YES];
    [[[self WhereAmI] layer] addAnimation:animation forKey:@"pageCurlAnimation"];

По сути, я пытаюсь загрузить свой новый вид программно, сдвинуть его за видимым в данный момент видом, а затем свернуть вид сверху, чтобы показать вид, находящийся внизу. Я получаю частичную анимацию скручивания, но свернутая «страница» не является непрозрачной, что странно. Кроме того, когда я не устанавливаю свой вид и метку скрытыми, даже если вы видите, что они свернулись, вы все равно видите их «снизу», что тоже странно. Кроме того, я не вижу UILabel, который я поместил в XIB для нового представления.

Есть мысли?

Спасибо!


Итак, у меня есть рабочее решение, но это не совсем то, что я надеялся сделать. Я все еще хотел бы найти решение моего первоначального вопроса, но вот что я сейчас делаю:
  1. Фоновое изображение для моего "базового" вида - это изображение тетради в спиральной форме.
  2. Фоновое изображение для всех остальных представлений - это скриншот страницы с завитком. (Под «фоновым изображением» я подразумеваю UIColor, созданный с помощью patternImage.)
  3. Код для переходов:

    - (IBAction)NavigationTabSelected:(id)sender 
    {
        // Flipping views is driven by a SegmentedControl
        int selected = [[self NavigationTabsSegmentedControl] selectedSegmentIndex];
        int current = [[self ViewArray] indexOfObject:[self ActiveFlipView]];
        UIView *newFlip = [[self ViewArray] objectAtIndex:selected];
    
        BOOL up = selected > current;
        [UIView animateWithDuration:1.0
                         animations:^{
                             [UIView setAnimationTransition:(up)?UIViewAnimationTransitionCurlUp:UIViewAnimationTransitionCurlDown forView:[self RightView] cache:YES];
                             [[self ActiveFlipView] removeFromSuperview];
                             [[self RightView] addSubview:newFlip];
                         }
                         completion:^(BOOL finished){
                             [self setActiveFlipView:newFlip];
                         }];
    }
    

Как вы можете видеть, вкладки справа от текущей вкладки генерируют "свернуться", а вкладки слева от текущей вкладки - "свернуться вниз". Это не совсем то, что я хотел, но это служит моей цели.

Есть идеи получше?

1 Ответ

0 голосов
/ 18 октября 2011

рассматривали ли вы загрузку в качестве модального вида?

- (void)yourFrontViewControllerMethod
{
    YourBackViewController *bfvc = [[YourBackViewController alloc] init];
    [bfvc setModalTransitionStyle:UIMoalTransitionStylePartialCurl];
    [self presentViewController:bfvc];
    [bvfc release];
}

Это даст вам желаемый эффект свертывающегося вида для отображения другого вида.

Также как общее правилоМы стараемся не создавать анимацию таким образом.Попробуйте вместо этого использовать блочный метод (например, [UIView AnimateWithDuration: ....]);

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...