-1

表示されている画面の外側にビューを作成してプッシュしたいのですが (デフォルトの pushViewController アニメーションのように)、外側に UIView を作成できません。ここでこのコードを試していましたが、うまくいきません。ビューは常に作成され、現在の UIScreen 境界に表示されます。つまり、押し出されるビューと押し込まれるビューの両方の代わりに、外に出るビューだけが「移動」し、新しいビューはその場所に留まります。

表示するビューの .m で:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // set the views frame off the screen
    self.view.frame = CGRectMake(320, 0, 320, 460);
}

実際に遷移を行うメソッドでは:

-(void)showOverview:(UIViewController *)sender  //sender = mapviewController
{
    NSLog(@"overview");
    // current view (frame) = mapviewCOntroller.view
    CGRect outFrame = self.view.frame;

    if (!self.overviewViewController) {
        self.overviewViewController = [[UCOverviewViewController alloc] init];
        self.overviewViewController.transitionDelegate = self;

        // create a new View for the overview
        [self.overviewViewController.view setCenter:self.view.center];
        [self.view.window addSubview:self.overviewViewController.view];
        [self.view.window bringSubviewToFront:self.mapViewController.view];
    }

    CGRect inFrame = self.overviewViewController.view.frame;
    outFrame.origin.x = outFrame.origin.x-outFrame.size.width;  
    inFrame.origin.x = self.view.frame.origin.x;

    [UIView animateWithDuration:0.5f animations: ^{
        [self.view setFrame:outFrame];
    }];  
}

編集:これは私の最終的なコードであり、少なくとも重要な部分です。これで、現在表示されているビューは、オフスクリーン ビューがスライドインすると同時に、スライダーをオフスクリーンにします。

-(void)showOverview
{
    if (!self.overviewViewController) {
        NSLog(@"OverviewViewController created!");
        self.overviewViewController = [[UCOverviewViewController alloc] init];
        self.overviewViewController.transitionDelegate = self;
        // add the subView
        [self.view addSubview:self.overviewViewController.view];
        [self.view sendSubviewToBack:self.overviewViewController.view];
    }
    CGRect outFrame = self.mapViewController.view.frame;
    CGRect inFrame = self.overviewViewController.view.frame;

    outFrame.origin.x -= outFrame.size.width;
    inFrame.origin.x = self.view.frame.origin.x;
    self.isOverviewViewVisible = YES;

    [UIView animateWithDuration:0.5f animations: ^{
        [self.mapViewController.view setFrame:outFrame];
        [self.overviewViewController.view setFrame:inFrame];
    }];
}
4

2 に答える 2

0

コードには、実際に何が起こっているのかを理解するのを混乱させる奇妙で不適切なものがありますが、... ウィンドウをどこでも使用することは忘れてください。心配する必要があるのは、これだけです。ビュー A がメイン ビューだとします。ビュー B は、外側に表示して A の上に表示するビューです。次に、ペン先からまたは手動で B を作成し、サブビューとしてビュー A に追加します。アニメーション ブロックに移動して所定の位置に移動する前に、次のことを確認してください。現在のフレームは {ViewA.bounds.size.width, 0, ViewB.bounds.size.width, ViewB.bounds.size.height} に設定されています。右上から入れたいとします。

于 2012-05-26T01:17:39.527 に答える
0

あなたの問題はこの行です。

        self.overviewView = self.overviewViewController.view;

作成したビューを既に持っているビューでオーバーライドしています。

以下はそれを行うための素晴らしい方法ではありませんが、私が持っていると思うものでうまくいくはずです.

- (void)viewDidLoad {
      self.overviewViewController.view.frame = CGRectMake(320, 0, 320, 460);
      self.overviewViewController.view.backgroundColor = [UIColor blueColor];
}

次に、別のアクションでアニメーションを実行します。

  [UIView animateWithDuration:0.5f animations: ^{
    self.overviewViewController.view.frame = CGRectMake(0,0,320,460);  
  }]; 
于 2012-05-26T00:46:56.853 に答える