2

このコードは次のことを行います。消えることを意図したNavigationControllerの「スナップショット」を取ります。次に、スナップショットがコンテナビューコントローラのビューに追加され、スライドして離れて、新しいNavigationControllerが表示されます。'Pop-Out-Effect'を作成するために、midAnFrameはビューを実際のビューより少し大きくします。その後、postAnFrameはコンテナビューのフレームからのスライドを提供します。うまく機能します。唯一の問題は、animationContainerのサブビューがアニメーション中にsuperViewのようにサイズ変更されないことです。

- (void)bringUpSettingsNavigationController {
CGFloat gradientWidth = 20;
CGFloat frameIncrease = 10;
CGRect preAnFrame  = CGRectMake(- gradientWidth, 0, self.view.frame.size.width + gradientWidth, self.view.frame.size.height);
CGRect midAnFrame  = CGRectMake(-(frameIncrease + gradientWidth), - frameIncrease, preAnFrame.size.width + (2*frameIncrease), preAnFrame.size.height + (2*frameIncrease));
CGRect postAnFrame = CGRectMake(midAnFrame.size.width, midAnFrame.origin.y, midAnFrame.size.width, midAnFrame.size.height);

UIView *animationContainer = [[UIView alloc]initWithFrame:preAnFrame];
animationContainer.backgroundColor = [UIColor clearColor];
animationContainer.autoresizesSubviews = YES;

self.topImageView = [[UIImageView alloc]initWithImage:[self topImageFromView:self.view]];
self.topImageView.frame = CGRectMake(gradientWidth, 0, preAnFrame.size.width - gradientWidth, preAnFrame.size.height);
[animationContainer addSubview:self.topImageView];
self.topImageView.clipsToBounds = YES;
UIView *gradientView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, gradientWidth, preAnFrame.size.height)];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = gradientView.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor colorWithWhite:0 alpha:.5] CGColor], nil];
gradientLayer.startPoint = CGPointMake(0, 0.5);
gradientLayer.endPoint = CGPointMake(1.0, 0.5);
[gradientView.layer insertSublayer:gradientLayer atIndex:0];
gradientView.backgroundColor = [UIColor clearColor];
[animationContainer addSubview:gradientView];
gradientView.clipsToBounds = YES;

[self.view addSubview:animationContainer];

BYSettingsNavigationController *settingsNavigationController = [[BYSettingsNavigationController alloc]initWithRootViewController:[[BYSettingsViewController alloc]init]];
[self addChildViewController:settingsNavigationController];
settingsNavigationController.view.frame = self.view.bounds;
[self.view insertSubview:settingsNavigationController.view belowSubview:animationContainer];
[settingsNavigationController didMoveToParentViewController:self];

[UIView animateWithDuration:0.2 animations:^{
    animationContainer.frame = midAnFrame;
} completion:^(BOOL finished) {
    [UIView animateWithDuration:.5 animations:^{
        animationContainer.frame = postAnFrame;
    } completion:^(BOOL finished) {
        [self.topImageView removeFromSuperview];
        [gradientView removeFromSuperview];
        self.topImageView = nil;
    }];
}];

[self.currentNavigationController willMoveToParentViewController:nil];
[self.currentNavigationController.view removeFromSuperview];
[self.currentNavigationController removeFromParentViewController];
}

右下隅を確認してください

よろしくお願いします。2013年もよろしくお願いします。

ダリオ

4

1 に答える 1

2

ズームインするのではなく、フレームサイズを変更するだけです。ズームインするには、ビューの変換を変更する必要があります。

あなたがする必要があるのは、この線に沿った何かです:

view.transform = CGAffineTransformMakeScale (2.0 , 2.0);

たとえば、X2をズームします

于 2013-01-05T15:02:06.117 に答える