- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序很好地使用 UIPageViewController 向用户显示一堆(几乎全屏)卡片。然而,一些用户(最初)并没有得到他们可以向左/向右滑动来浏览所有卡片(即使屏幕上出现了点,请看:)。
我的想法是做一个小的一次性动画,部分滑动到下一张卡片的一半,然后弹回以非常直观地向用户展示滑动是可能的。
我查看了 UIPageViewController API,但没有看到任何标准允许我这样做的函数。
实现这一点的最佳方法是什么(但仍使用标准的 UIPageViewController)?是否可以将假手势发送到 UIPageViewController?
最佳答案
我找到了一种使用 UIPageViewController 标准行为的方法。
基本上这很简单,我等到加载 View ,然后在 viewDidAppear AFTER 0.5 秒后移到下一页(以编程方式),几乎在(0.25 秒)之后 - 在第一个动画完成之前 - 我移回上一个页。
您可以在下面看到我的代码,请注意我正在使用延迟函数来处理我的代码中的延迟,它还包括:
///executes the supplied closure after x seconds on the main queue
public func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
class VCPager: VCPagBase, ProtocolVCScanResult, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var product : Product?
var productMatch : ProductMatch?
var disableAlternatives : Bool = false
//the loadView is a proprietary function that just loads the view from the storyboard, nothing special
lazy var vcPage1 = VCPage1.loadView()
lazy var vcPage2 = VCPage2.loadView()
var currentPageIndex : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
dataSource=self
delegate=self
setViewControllers([pageForindex(0)!], direction: .Forward, animated: false, completion: nil)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
hintSwipe()
}
//MARK: - helper functions
func hintSwipe() {
delay(0.5) {
self.carrouselJumpForward()
}
delay(0.75) {
self.carrouselJumpBack()
}
}
func pageForindex(pageIndex : Int) -> UIViewController? {
let vc : VCScanResultPageRoot?
switch(pageIndex) {
case -1 : vc = vcPage2
case 0 : vc = vcPage1
case 1 : vc = vcPage2
case 2 : vc = vcPage1
default : vc = nil
}
vc?.passAlongModelFrom(self)
return vc
}
func indexForPage(vc : UIViewController) -> Int {
if vc == vcPage1 { return 0 }
if vc == vcPage2 { return 1 }
//not found = 0
return 0
}
func carrouselJumpForward() {
currentPageIndex += 1
setViewControllers([self.pageForindex(currentPageIndex)!], direction: .Forward, animated: true, completion: nil)
}
func carrouselJumpBack() {
currentPageIndex += -1
setViewControllers([self.pageForindex(currentPageIndex)!], direction: .Reverse, animated: true, completion: nil)
}
//MARK: - UIPageView
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let currentPageIndex = indexForPage(viewController)
return pageForindex(currentPageIndex+1)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentPageIndex = indexForPage(viewController)
return pageForindex(currentPageIndex-1)
}
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
guard let vcCurrentPage = previousViewControllers.first where finished else {
return
}
currentPageIndex = indexForPage(vcCurrentPage)
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return 2
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return currentPageIndex
}
}
关于ios - UIPageViewController 动画表示可以滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768595/
仅限 Swift 我创建了一个功能齐全的 UIPageViewController,其中包含 3 个不同的 UIViewController,是否可以在其中一个 UIViewController 中创
我正在寻找一种解决方案,其中我将一个 uipageviewcontroller 嵌入到另一个 uipageviewcontroller 中,因此当我尝试滑动最后一个 viewcontroller 时内
我想调整我的 UIPageViewController 以像图像中那样工作,目前 1b 可以去 2a 等。我需要什么像图片中那样锁定方向?我忘记了什么还是我使用了错误的逻辑。任何提示都会有很大帮助!
我在从 UIPageViewController 打开 View 并返回到 PageViewController 上的同一页面时遇到问题。我当前的设置是一个教程,您可以滚动页面查看教程。在第二页上,它
几个小时以来,我一直在努力解决这个问题,我一定是误解了 UIPageViewController 的工作原理。 我有 5 个设置屏幕(加载到 UIPageViewController 中的独立 Vie
我正在尝试将 UIPageViewController 的 UIPanGestureRecognizer 分配给不同的(自定义) View ,以便用于页面切换的平移手势仅适用于屏幕的特定区域。代码基本
我的 UIPageViewController 有一个大问题。我想使用部分和子部分在我的应用程序中呈现内容。因此,我创建了 UIPageViewController 的“两个” 实例 - 水平(红色)
我正在尝试创建一个只占据屏幕一部分的滚动页面 View Controller 。我已经使用 Storyboard 和 ContainerView 对象成功地做到了这一点,但我现在需要复制以编程方式创建
我正在使用 UIPageViewController 来浏览页面(UIViewController 数组)。我将页面 View Controller 推到顶部导航 Controller 上。 当我启动
我在 Xcode 4 中使用基于页面的应用程序模板来加载 PDF 页面并在隐藏的文本框上创建一个 UITextView,以便用户可以写笔记。 到目前为止,我已经完成了所有工作,但是当我添加 UITex
我正在使用带有 transitionStyle 的 UIPageViewController UIPageViewControllerTransitionStyleScroll和导航定位UIPageV
我是 iPhone 应用程序开发新手,需要在我正在开发的应用程序中显示 PDF 文件。我想使用 UIPageViewController 因为它允许分页等。到目前为止,我还无法弄清楚如何将内容加载到
谁能告诉我,如何使用 UIPageViewController 在我的背景图像而不是 View 边界周围制作阴影? 换句话说,我有一个“不规则的背景图像”,其边界看起来像波浪。当我从一个页面转到另一个
我的 UIPageViewController 在 iOS 5 中运行良好。但是当 iOS 6 出现时,我想使用新的滚动过渡样式(UIPageViewControllerTransitionStyle
我已经在这上面花了几个小时了。我已使用 UIPageViewControllerNavigationOrientationHorizontal 初始化了 UIPageViewController,
在我的应用程序中,我使用 UIPageViewController (PVC) 以及 UIPageViewControllerTransitionStylePageCurl 过渡样式和 UIPageV
我有一个 UIPageViewController显示带有 Transition style scroll 的图像.我要处理tap和 pan手势所以为了做到这一点,我做了一个小技巧,把另一个 view
我有一个 UIPageViewController ( 委托(delegate))管理 3 个 UIViewController . 要从第二个 View 转到第三个,我必须点击一个按钮,否则第二个
我正在展示一个简单的 UIPageViewController 并向其中添加一些非常简单和愚蠢的 subview Controller 。当 UIPageViewController 被解雇时,我正在
我有一个带有动态变化数据源的 UIPageViewController - viewControllerAfterViewController 和 viewControllerBeforeViewCo
我是一名优秀的程序员,十分优秀!