使用 3D Touch 的精简预览视图

Posted

技术标签:

【中文标题】使用 3D Touch 的精简预览视图【英文标题】:Using a condensed peek view with 3D Touch 【发布时间】:2015-09-27 16:34:11 【问题描述】:

我刚刚在我的应用程序的表格视图中实现了 3D Touch 的 peek and pop 功能。我正在为 peek 视图使用不同的、更简洁的视图控制器,并且我希望 pop 将用户带到视图的完整版本(与 Instagram 应用程序的风格相似)。

我想弄清楚我该怎么做?当我实例化 peek 时,我看不到如何在代码中执行此操作,所以我唯一能想到的就是在弹出后立即转到完整视图?

有人有什么想法吗?

编辑:

我的意思是这种系统:

【问题讨论】:

嗨,我有一个关于你的 peek and pop 的问题。弹出视图控制器后,如何将 UItextView / UILabel 重新定位到底部?谢谢... @Felix 我有单独的视图控制器用于“偷看”版本和“弹出”版本。 'popped' 版本只是标准视图控制器,用户会看到他们是否正常运行。 感谢您的快速回复。解决了我的难题。 【参考方案1】:

这对我有用。也许在- (void)previewingContext: (id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit 中做一个条件语句来帮助你确定你想要去的全屏以及它是如何显示的。如果满足此条件语句,则使用self.storyboard instantiateViewControllerWithIdentifier.... 实例化UIViewController,然后推送到它。这是我的例子:

- (void)previewingContext(id<UIViewControllerPreviewing>)previewingContext
 commitViewController:(UIViewController *)viewControllerToCommit 


    //this check is only for demonstration purposes
    if (viewControllerToCommit) 
        FullViewController * fullVC = [self.storyboard instantiateViewControllerWithIdentifier:@"fullVC"];
        [self.navigationController pushViewController:exp animated:YES];

    

您可以在界面生成器中设置故事板标识符:

如果您需要更多帮助,请告诉我,但我需要更多信息。

【讨论】:

【参考方案2】:

我想你回答了你自己的问题。直接转到完整视图。在弹出窗口中显示viewControllerToCommit 不是强制性的。您可能仅使用精简的 viewController 引用来确定要传递给完整视图的内容。例如,如果它是一个细节视图,则在您的浓缩视图中传递该对象,从该细节派生出细节。

-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit

   SomeClass *detailObj = viewControllerToCommit.detailObject;
   DetailVCClass *detailViewControllerFull = [[DetailVCClass alloc] initWithObject:detailObj];

   // Present the full VC
   [self presentViewController:detailViewControllerFull animated:YES completion:nil];

   // Alternatively, using Nav controller, you might pop onto the stack
   [self.navigationController pushViewController:detailViewControllerFull animated:YES];

当然,您正在使用情节提要,因此您可以进行相应调整。

关键是,仅仅因为它们为您提供了对您在 peek 中呈现的精简视图的引用,并不意味着这是您必须弹出的视图。他们将其命名为 viewControllerToCommit 并没有帮助。

【讨论】:

以上是关于使用 3D Touch 的精简预览视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 3D 触摸窥视动作的预览动作中访问呈现视图控制器?

3D Touch 和状态恢复的问题

Blender Viewport Shading(在 3D 视图中显示/着色对象的方法:材质预览)问题

iPhone几乎所有3D Touch功能

如何实现 3D-Touch Peek-and-select?

iOS开发之3D Touch