2

所以我试图在我的应用程序中实现 ECSlidingViewController 示例。 github 源代码

我唯一想做的修改它是防止 TopView 在更改包含的视图之前完全滑出屏幕,而是将 TopView 保持在原位,但使用它的新视图控制器更新它的包含视图从菜单中选择。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 回答
1

如果它只是您要删除的弹跳,那么不要调用:

[self anchorTopViewOffScreenTo:side animations:nil onComplete:nil];

直接调用:

[self.slidingViewController resetTopView];
于 2013-05-15T00:51:45.093 回答