Tag: 过渡

独立导航栏

声明导航栏的独立性 大多数情况下,我们使用UINavigationBar附带的UINavigationBar 。 在这种情况下,导航控制器将创建强大的条形图并将其显示,并且我们可以随时使用导航控制器对象访问实际的条形实例。 导航控制器还将自己设置为关联导航栏的委托。 但是,如何管理所有这些导航内容呢? 实际上,它具有相当合理的机制。 UINavigationBar包含用于显示内容的UINavigationItem数组。 根据Apple文件,UINavigationItem 手段; 当关联的视图控制器可见时,将由导航栏显示的项目。 例如,每当您将视图控制器推入导航控制器堆栈时,导航控制器都会获取即将到来的视图控制器的导航项,并将其推入导航栏的导航项数组。 另外,如果您从导航堆栈中弹出当前视图控制器,其导航项也会从导航栏的导航项数组中弹出。 如果要在其上方显示的导航栏上进行更改,则应处理视图控制器的导航项。 从Apple文档中获取的数据可以使您更清楚地了解这些内容。 当然,由于有了导航控制器,所有这些东西大多数时候都会在后台自动运行。 实际上,为了澄清谁可以控制上述导航栏,如果您问谁是导航栏的主角,答案肯定是UINavigationController 。 但是 ,可能有时候我们想打破这种纽带。 您可以认为它是没有必要的,甚至您可能也认为应该避免使用它,因为它是默认行为。 但是,让我们看一下我在现实世界中遇到的问题的简化版本; 您可以看到使用交互式弹出手势时导航栏正在褪色。 实际上,我认为它看起来很酷,但是这可能是不受欢迎的行为,尤其是您的产品经理期望您从屏幕顶部到底部的可靠过渡。 在这种情况下,我们应该使用独立的导航栏。

让我们建立App Store的互动过渡

新设计的App Store具有许多闪亮的新功能,但是没有什么可以与Apple在选项卡栏中添加的“今日”部分相提并论的。 它具有大量用户可能会感兴趣的信息,并添加了“ APP OFF THE DAY”,“ DAY GAME OF DAY”等类别,这是非常明智的举动,它使App Store在新加入的程序员中更具竞争力,由于用户将不再仅看到收视率最高的应用程序。 当我浏览新类别时,我对自己说:哇,这种过渡看起来令人惊讶,并且可以平滑地连接两个不同的页面。 因此,我决定自己制作一个版本。 完整的项目在本教程的最后 重新创建类似Apple为App Store“今日”类别制作的卡片。 通过使用集合视图+平移手势识别器。 该项目基于Swift 4。 只需将TransitionClone.swift复制并粘贴到您的项目中,然后将UIViewControllerTransitioningDelegate添加到要使用的Class中。 然后在上面添加两个函数。 在这里,我创建了一个名为transitionMode的枚举,目的是告诉代码我们处于什么过渡状态,如果要到Present而不是将其设置为“ present”,或者将dismiss设置为“ dismiss”,则很简单。 不要忘记设置开始帧和结束帧,例如: 对于Pan Gesture,我们将使用UIPanGestureRecognizer,其中包括诸如开始,更改,结束等状态。这将为我们提供方便的方式来操纵动画进行中的百分比。 您很快就会得到我正在谈论的内容,但是现在让我们将上面的代码添加到目标视图控制器中即可。 在Image上拖动时创建收缩的动画,请注意,由于UIViewPropertyAnimator具有暂停和恢复动画的优势,因此我们在此处不使用UIView.animate。 您可能在想为什么我们需要暂停和恢复动画? 因为我们希望动画与用户的手指互动! 换句话说就是“跟随”手指。 创建一个手势识别器并添加到UIView中,我在按钮上添加了它,但是可以将其添加到imageView上 创建panRecognizer,它应该可以正常工作。 这就是魔术的作用,在开始播放后立即暂停动画,现在我们以防万一.changed,然后跟踪手指从其初始位置拖动的垂直距离(如果要跟踪水平距离,只需更改平移。 y⇢translation.x)。 而不是将其添加到当前动画过程中(animator.fractionComplete)。 对于单次点击识别,它甚至更容易,无需添加另一个点击识别器。 只需在identifier.state = end中添加一条if语句,请参见下面的代码:) arnoldlee850807 / rebuildAppStoreTransition 通过在GitHub上创建一个帐户来促进rebuildAppStoreTransition开发。 github.com 希望您像我一样学到UIPanGestureRecognizer的惊人之处,祝编码愉快! Freepik从www.flaticon.com制作的图标已获CC 3.0 BY许可

自定义视图过渡(如新的App Store)

现在,我已经完成了故事板的设置,我创建了一个名为PokemonCell的新文件,并将其设置如下: 导入UIKit 类PokemonCell:UICollectionViewCell { @IBOutlet弱var pokemonNameLabel:UILabel! @IBOutlet弱var pokemonImage:UIImageView! func updateWithImage(image:UIImage?){ 如果让imageToDisplay = image { pokemonImage.image = imageToDisplay }其他{ pokemonImage.image =无 } } 覆盖func awakeFromNib(){ super.awakeFromNib() updateWithImage(image:nil) } 覆盖func prepareForReuse(){ super.prepareForReuse() updateWithImage(image:nil) } } 连接您的插座,并将收集单元设置为PokemonCell。 在ViewController.swift文件中,设置数据源和集合视图的委托: collectionView.dataSource =自我 collectionView.delegate =自我 并设置您的DataSource和Delegate方法: 扩展ViewController:UICollectionViewDataSource { func numberOfSections(在collectionView:UICollectionView中)-> Int { 返回1 } func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int { 返回myPokemon.count } […]

在Xcode 9.4和Swift 4.1中使用Hero Transition Library

您可以从我的网站上阅读此故事: https://devgenes.com/posts/hero-transitions-with-xcode-10-swift-4-2/ “ Hero是用于构建iOS视图控制器转换的库。 它在UIKit繁琐的过渡API之上提供了一个声明层,使自定义过渡对于开发人员而言是一项轻松的任务。” Hero的GitHub库说。 我已经尝试过多次在Google上搜索,但是找不到任何最新教程。 我决定制作自己的教程。 所以,我们开始。 我通过了安装程序,因为在Hero的文档页面上对此进行了很好的解释。 我们将以代码开始。 我说代码是因为我将近一年没有使用Storyboards。 (感谢@ buildthatapp) 创建简单的UI(没有情节提要) 在“ pod安装”并“打开myapp.xcworkspace”之后,我们要做的第一件事是从Targets-> General-> Deployment Info-> Main Interface中删除“ Main.storyboard”。 如果我们运行该应用程序,它将显示黑屏。 因为我们还没有UIWindow。 (实际上现在是“ nil”。) 因此,让我们弄清楚。 我们完成了。 请让我知道你的想法。 如果您想保持联系,也许只是说“嗨”,您可以使用下面的链接。 谢谢。 Twitter —邮件

在您的iOS应用中实现更好的路由的新方法。

您好,我叫Vladislav,我是独立的iOS开发人员。 两年前,当我开始使用新生的VIPER体系结构时,遇到了很多问题。 在理解方面存在问题,需要在没有常规文档的情况下找到更好的方法。 有时我在想,这种方式不喜欢我。 我不喜欢标准的VIPER方法,因为Wireframe会创建所有模块并在其他模块之间进行过渡。 这对于我的项目来说并不灵活。 令我高兴的是,俄罗斯社区为与VIPER的合作开辟了新途径。 这是不带线框的新型VIPER,具有非常可分解的部件。 太酷了! 谢谢Rambler&Co。 但是我没有什么问题,对于使用Swift来说,应该使用Storyboards来组装模块,并使用Obj-C库在它们之间进行转换。 一切正常,但没有情节提要,我被迫使用DI进行组装😱。 好了,经过两天的学习SwinjectDI之后,我开始在项目中使用它,但是我遇到了最后一个问题-Obj-C库。 我不想使用他,因为我应该在ModuleInput协议中使用@objc批注。 不是纯粹的快速方法,是吗? 好吧,我开始思考,如何才能做得更好,更灵活。 我想看纯Swift代码。 我发现了这个! 我开始编写具有更多上下文和设置的新库。 我完成了这个项目并结识了LightRoute🚀 LightRoute-更自定义的纯Swift解决方案,可帮助您更好地在Swift上进行过渡。 她可以使用UIStoryboardSegue和UIStoryboard 。 LightRoute具有链结构。 所有方法都按顺序调用。 我不想只是说,让我们开始研究! 让我们过渡吧! 🤓 让我们记住, TransitionHandler协议是实例UIViewController,它在新的UIViewController /模块上启动转换。 LightRoute可以在当前情节提要中的控制器中进行过渡,该故事板具有root视图控制器属性 这个例子演示了它是如何工作的: