- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用自定义 Controller 进行转换(由于项目中的固有循环,无法使用导航 Controller ,这将允许导航 Controller 堆栈无限增长 [我认为这会导致内存问题])。我正在使用 UIView animateWithDuration:animations:completion:
模拟导航 Controller 滑动动画(当转换到新屏幕时)当按下触发转换的按钮时,我要转换到的新 View 的框架被设置到屏幕外位置。在过渡动画 (UIView animateWithDuration:animations:completion:) 中,当前屏幕上的 View 将其框架设置为屏幕外位置,新 View 设置为屏幕上位置。
这是在我的自定义过渡 Controller 中:
CGFloat windowWidth = self.mainView.frame.size.width;
CGFloat windowHeight = self.mainView.frame.size.height;
CGRect offScreenLeft = CGRectMake(-1*windowWidth, 0.0, windowWidth, windowHeight);
CGRect onScreen = self.mainView.frame;
CGRect offScreenRight = CGRectMake(windowWidth, 0.0, windowWidth, windowHeight);
if (direction == TransitionDirectionForward)
{
if (dragBackgroundOnscreen){
[self.mainView addSubview:self.backgroundView];
[self.mainView sendSubviewToBack:self.backgroundView];
self.backgroundView.frame = offScreenRight;
}
self.currentViewController.view.frame = offScreenRight;
[UIView animateWithDuration:0.65
animations:^{
oldViewController.view.frame = offScreenLeft;
if (dragBackgroundOffscreen)
self.backgroundView.frame = offScreenLeft;
else if (dragBackgroundOnscreen)
self.backgroundView.frame = onScreen;
self.currentViewController.view.frame = onScreen;
}
completion:^(BOOL finished){
[oldViewController.view removeFromSuperview];
if (dragBackgroundOffscreen)
[self.backgroundView removeFromSuperview];
[oldViewController willMoveToParentViewController:nil];
[oldViewController removeFromParentViewController];
[self.currentViewController didMoveToParentViewController:self];
}];
}
else if (direction == TransitionDirectionBackward)
{
if (dragBackgroundOnscreen){
[self.mainView addSubview:self.backgroundView];
[self.mainView sendSubviewToBack:self.backgroundView];
self.backgroundView.frame = offScreenLeft;
}
self.currentViewController.view.frame = offScreenLeft;
[UIView animateWithDuration:0.65
animations:^{
oldViewController.view.frame = offScreenRight;
if (dragBackgroundOffscreen)
self.backgroundView.frame = offScreenRight;
else if (dragBackgroundOnscreen)
self.backgroundView.frame = onScreen;
self.currentViewController.view.frame = onScreen;
}
completion:^(BOOL finished){
[oldViewController.view removeFromSuperview];
if (dragBackgroundOffscreen)
[self.backgroundView removeFromSuperview];
[oldViewController willMoveToParentViewController:nil];
[oldViewController removeFromParentViewController];
[self.currentViewController didMoveToParentViewController:self];
}];
}
我还希望背景 (self.backgroundView) 保持静态,除非移动到具有自己背景的屏幕(即,如果新 View 背景是相同的背景,我不希望背景滑动)。
我使用 TransitionDirectionBackward 和 TransitionDirectionForward 只是为了区分向左滑动和向右滑动。
一切都很好,除非转换涉及 GMGridView。当 Gridviews 框架设置为屏幕外框架时的问题实际上是将其当前选定页面的框架设置为该屏幕外框架。 gridview 的其他页面不受此框架的限制,因此它们甚至可以在转换之前出现在屏幕上。我尝试在 GridView 的 viewcontroller View 上设置 frame 和 bounds 属性,但我仍然可以在过渡动画之前让 gridview 的页面出现在屏幕上。
有人看到这个问题的解决方案吗?我试图找到一种方法来在转换期间裁剪 GridView 的 View ,这样页面就不会出现,除了当前选定的页面,但还没有发现任何有用的东西。
更新:我通过为可见但不应该可见的单元格设置 alpha = 0.0 找到了一个可能的修复方法(稍后在过渡动画完成时设置 alpha = 1.0)。但是,我需要知道为哪些单元格执行此操作。我需要一种方法来访问 GMGridView 当前所在的页面,以便我可以将相邻页面的单元格设置为具有 0.0 的 alpha。
更新:通过使用 myGridView convertPoint 找到了使其工作的方法:(我通过反复试验发现的 cgpoint 位于页面的第一个单元格上。)fromView:myGridView.window。注意:我需要一个 if/else if 来检查我是在横向左侧还是横向右侧,因为当设备旋转时窗口坐标不会旋转。有了这个,我能够在我指定的屏幕上的点处获取单元格的索引,然后将前一页设置为透明,直到过渡动画结束。
我仍然想知道是否有一种“裁剪”gridview 的方法,以便单元格可以不透明,但永远不会显示......?
最佳答案
我想我把问题复杂化了。我一直在寻找 UIView 的 clipsToBounds
方法(尽管我可以发誓我之前尝试过)。无论如何,它现在可以工作了!
关于objective-c - GMGridView 出现在屏幕外,但与屏幕 View 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264321/
我正在使用 GMGridView使用子类 UIView 作为单元格的 contentView。这些在 - (GMGridViewCell *)GMGridView:(GMGridView *)grid
我在使用 GMGridView 时遇到了奇怪的问题。实际上,我正在使用 GMGridview 来显示餐厅餐 table 。如果我选择了 Table1(即第一个单元格),它应该变为红色(这意味着它已被占
我在 iOS 应用程序中使用 GMGridview,我想同时启用删除模式和排序模式(长按)。目前只能删除或排序。 最佳答案 是的,可以通过子类化 GMGridview。 查看 this链接。 关于io
出于学习目的,我正在研究“太阳能”应用程序。我注意到可以使用捏合手势缩放图 block 。它缩放的方式清楚地表明已经设置了 uiview 的 anchor 。 你可以在这里看到它的视频http://w
我需要在https://github.com/gmoledina/GMGridView中添加下拉刷新效果GMGridView!所以我只是将 GMGridView 与 EGOTableViewPullR
我正在做一个项目并研究使用此处找到的 GMGridView:https://github.com/gmoledina/GMGridView . 有没有人用过,加了个UIPageControl?如果可以
我们在 android 中是否有类似 gmgridview 的等价物。一些库或可以为 android 模拟相同行为的东西,如 GMGRIDVIEW 为 iOS 所做的。 最佳答案 我认为没有适用于 A
首先这个问题是针对练习过的人GMGridView使用 iOS 5.0+ 我将 GridView 的单元格作为一个单独的屏幕,上面有一些组件(按钮、带有自定义单元格的 tableView)。问题是在 i
我正在尝试将 GMGridView 添加到我的 nib 文件中的 subview ,但我似乎无法弄清楚如何执行此操作,因为 GMGridView 不断占用我的 nib 生成的 View 中的所有空间,
我正在使用自定义 Controller 进行转换(由于项目中的固有循环,无法使用导航 Controller ,这将允许导航 Controller 堆栈无限增长 [我认为这会导致内存问题])。我正在
我是一名优秀的程序员,十分优秀!