0

次のようなページカールでアニメーション化しているビューはほとんどありません。

[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:NO];

ビューは右からカールしますが、デバイスを 180 度回転させると左からカールします。

私のアプリは、両方の横向きをサポートしています。肖像画は許可されていません。

それを解決する方法は?

4

1 に答える 1

1

まず第一に、あなたは使ってみましたか:

[UIView setAnimationBeginsFromCurrentState:NO];

これはあなたの問題ですか :

ランドスケープ モードで「カールアップ」を行っている場合、右側のボタンを使用すると、ページが右上から左下にめくれ始めます (つまり、右手でページをめくって、ページの左側に移動します)。また、本の装丁が左側にあることも意味します)。

まったく同じことをしているが、左側のボタンを使用している場合、コンテンツを正しく回転させても、vc で「shouldAutorotateToInterfaceOrientation : True」と言って、アニメーションは回転しません。その結果、アニメーションは左下から右上に移動し、本の装丁が右側にあるという印象を与えます。

それを説明するためのいくつかのコード:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        view1 = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
        [view1 setBackgroundColor:[UIColor greenColor]];
        [view1 setFont:[UIFont systemFontOfSize:80]];
        [view1 setText:@"VIEW 1"];

        view2 = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
        [view2 setBackgroundColor:[UIColor redColor]];
        [view2 setFont:[UIFont systemFontOfSize:80]];
        [view2 setText:@"VIEW 2"];
    }
    return self;
}


-(void)didSwipeNext
{
    [self performSelector:@selector(swipePrevious) withObject:nil afterDelay:1];
}

-(void)didSwipePrevious
{
    [self performSelector:@selector(swipeNext) withObject:nil afterDelay:1];
}

-(void)swipeNext
{
    [UIView beginAnimations:@"curl" context:NULL];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationDidStopSelector:@selector(didSwipeNext)];

    [view1 removeFromSuperview];
    [self.view addSubview:view2];

    [UIView commitAnimations];
}

-(void)swipePrevious
{

    [UIView beginAnimations:@"curl" context:NULL];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationDidStopSelector:@selector(didSwipePrevious)];

    [view2 removeFromSuperview];
    [self.view addSubview:view1];

    [UIView commitAnimations];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:view1];
    [self performSelector:@selector(swipeNext) withObject:nil afterDelay:1];
}


// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

ウォークアラウンドは、ページ内のすべての UI 要素をパリングするためのラッパー (UIView) を作成することです。ラッパーをView Controllerのビューの唯一のサブビューと、ラッパーの他のすべてのビューのサブビューにしました。そして、以下のようにターゲットをラッパーに変更します

[UIView transitionWithView:self.wrapperView
                  duration:1.0 
                   options:UIViewAnimationOptionTransitionCurlUp 
                animations:^{[imageView setImage:foregroundImage];} 
                completion:nil];
于 2013-06-27T09:29:51.567 に答える