2

そこで、ECSlidingViewController サンプルをアプリに実装しようとしています。 これのgithubソース

それを変更するために私がしたい唯一のことは、含まれているビューを変更する前にTopViewが完全に画面外にスライドするのを防ぎ、代わりにTopViewをそのままにして、含まれているビューを新しいView Controllerで更新することですメニューから選択。これに対する Facebook アプリの見解は、まさに私が望んでいるものです。

プロジェクト内をしばらく見回した後、ECSlidingViewController.h 内の次のコード行と確実に (そして明らかに) 何か関係があると判断しました。

- (void)anchorTopViewOffScreenTo:(ECSide)side animations:(void(^)())animations onComplete:(void(^)())complete;

これが.mで呼び出される場所を見ました:

- (void)anchorTopViewOffScreenTo:(ECSide)side{
[self anchorTopViewOffScreenTo:side animations:nil onComplete:nil];
}

- (void)anchorTopViewOffScreenTo:(ECSide)side animations:(void(^)())animations onComplete:(void(^)())complete
{
CGFloat newCenter = self.topView.center.x;
if (side == ECLeft) {
 newCenter = -self.resettedCenter;
} else if (side == ECRight) {
 newCenter = self.screenWidth + self.resettedCenter;
}

[self topViewHorizontalCenterWillChange:newCenter];

[UIView animateWithDuration:0.25f animations:^{
 if (animations) {
  animations();
}
[self updateTopViewHorizontalCenter:newCenter];
} completion:^(BOOL finished){
 if (complete) {
  complete();
 }
 _topViewIsOffScreen = YES;
 [self addTopViewSnapshot];
 dispatch_async(dispatch_get_main_queue(), ^{
   NSString *key = (side == ECLeft) ? ECSlidingViewTopDidAnchorLeft : ECSlidingViewTopDidAnchorRight;
  [[NSNotificationCenter defaultCenter] postNotificationName:key object:self userInfo:nil];
 });
}];
}

これは、アニメーションがアニメーション化する方法を教えられていると推測している場所ですが、これがどのように画面外に移動するように指示しているのかわかりません。何かを に置き換えるのと同じくらい簡単なことを見落としていnilますか? おそらく、私が見つけていない別の値がどこかにあるのでしょうか? これは StackOverflow に関する私の最初の質問であり、Obj-C 全般については初めてですが、それがどのように機能するかについてはかなり理解しています。ですから、少なくとも正しい方向へのヒントを受け取ることを望んでいます。ありがとう!

4

2 に答える 2

6

次の方法を使用してください

- (void)anchorTopViewTo:(ECSide)side animations:(void (^)())animations onComplete:(void(^)())complete

それ以外の

- (void)anchorTopViewOffScreenTo:(ECSide)side animations:(void(^)())animations onComplete:(void(^)())complete

于 2012-07-21T22:45:52.613 に答える