首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将UIViewController中的UIView显示为上下文菜单预览

是通过使用UIContextMenuInteraction实现的。UIContextMenuInteraction是iOS 13及更高版本引入的一个API,用于在用户长按视图时显示上下文菜单。

要将UIView显示为上下文菜单预览,需要执行以下步骤:

  1. 在UIViewController中,确保UIView已经被添加到视图层次结构中。
  2. 在UIViewController中,创建一个遵循UIContextMenuInteractionDelegate协议的对象,并实现相关的代理方法。这些代理方法包括:
    • contextMenuInteraction(_:configurationForMenuAtLocation:):返回一个UIContextMenuConfiguration对象,用于配置上下文菜单的内容和行为。
    • contextMenuInteraction(_:previewForHighlightingMenuWithConfiguration:):返回一个UIViewController对象,用于在用户高亮显示菜单项时显示预览。
    • contextMenuInteraction(_:previewForDismissingMenuWithConfiguration:):返回一个UIViewController对象,用于在用户取消菜单时显示预览。
  • 在UIViewController中,创建一个UIContextMenuInteraction对象,并将其添加到UIView上。同时,将之前创建的遵循UIContextMenuInteractionDelegate协议的对象设置为UIContextMenuInteraction的delegate。
  • 在UIViewController中,实现相关的代理方法,以响应用户与上下文菜单的交互。这些代理方法包括:
    • contextMenuInteraction(_:willDisplayMenuForConfiguration:animator:):在菜单显示之前执行的操作。
    • contextMenuInteraction(_:willEndForConfiguration:animator:):在菜单即将结束时执行的操作。
    • contextMenuInteraction(_:willPerformPreviewActionForMenuWith:animator:):在用户选择菜单项时执行的操作。

完整的代码示例如下:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController, UIContextMenuInteractionDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建一个UIView,并添加到视图层次结构中
        let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        myView.backgroundColor = UIColor.red
        view.addSubview(myView)
        
        // 创建遵循UIContextMenuInteractionDelegate协议的对象
        let contextMenuDelegate = self
        
        // 创建UIContextMenuInteraction对象,并将其添加到UIView上
        let interaction = UIContextMenuInteraction(delegate: contextMenuDelegate)
        myView.addInteraction(interaction)
    }
    
    // 实现UIContextMenuInteractionDelegate协议的代理方法
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
        // 返回一个UIContextMenuConfiguration对象,用于配置上下文菜单的内容和行为
        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
            // 创建菜单项
            let action1 = UIAction(title: "Action 1", image: UIImage(systemName: "star")) { _ in
                // 执行菜单项的操作
                print("Action 1 selected")
            }
            
            let action2 = UIAction(title: "Action 2", image: UIImage(systemName: "heart")) { _ in
                // 执行菜单项的操作
                print("Action 2 selected")
            }
            
            // 返回菜单的内容
            return UIMenu(title: "Menu", children: [action1, action2])
        }
    }
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, previewForHighlightingMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
        // 返回一个UIViewController对象,用于在用户高亮显示菜单项时显示预览
        return nil
    }
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, previewForDismissingMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
        // 返回一个UIViewController对象,用于在用户取消菜单时显示预览
        return nil
    }
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, willDisplayMenuFor configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionAnimating?) {
        // 在菜单显示之前执行的操作
    }
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, willEndFor configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionAnimating?) {
        // 在菜单即将结束时执行的操作
    }
    
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) {
        // 在用户选择菜单项时执行的操作
    }
}

这样,当用户长按UIView时,将会显示一个上下文菜单,其中包含"Action 1"和"Action 2"两个菜单项。你可以根据实际需求自定义菜单项的内容和行为。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Xcode15新特性

创建项目 导航区第三个菜单 Symbol navigator 替换为 Bookmark navigator。 导航区 调试区菜单发生变化,并且输出内容随着不同级别拥有不同背景色。...Archive.png 功能 Assets 创建Image Set与Color Set可以生成类型安全标识符,在程序可以.标识符形式访问。...image.png 代码支持添加 Bookmark,在某一行代码或者选中多行代码后右击,可以看到相应添加菜单。可以在 Bookmark navigator 查看添加所有 Bookmark。...条件编译代码随着选择条件会高亮显示对应条件编译代码。 右击菜单 Show Quick Help 显示更加丰富文档内容。...编辑时 Quick Actions 可以快捷访问对应内容所有菜单,快捷键command + shift + A。 遇到多参数方法时,可以通过键盘方向键 —> 显示所有可能参数组合。

1.5K30

iOS14开发-菜单

它是一种立体触控技术,可感应不同触控压力。通过该技术可以给 App 设置最多 4 个不同 ShortcutItem(快捷操作菜单),实现方式分为静态和动态两种。...view.backgroundColor = .blue } } UIMenu UIMenu 在 iOS 13 引入,可以很方便创建程序菜单上下文菜单。...UIDeferredMenuElement,允许异步地创建 UIMenu,可以动态配置菜单内容。...(Context Menus),也是通过按压方式触发,不同于 3D Touch(Haptic Touch),Context Menus 一般用于 App 内菜单设置。...如果要启用上下文菜单,需要创建一个UIContextMenuInteraction并将其添加给某个触发 UIView,然后指定 delegate,在代理方法创建 UIMenu 并返回UIContextMenuConfiguration

77220

跟着官方文档学习3D Touch

菜单每个可以触发操作按钮,苹果称之为quick actions,我在此称之为快捷操作项。...---- 如上图所示,这是我在官方文档截取图片,上图中矩形菜单四个item就是我们所说“quick action”译为:快速操作项。...确切说,是系统默认最多显示4个,而不是字典容量4,你可以给这个字典数组赋值5个字典,但是最后只会显示前4个字典配置快捷操作项。...如果我们一个快捷操作项指定了子标题,那么系统就会以一行形式显示子标题(也许仅仅是标题一部分,后面跟着省略号)无论标题有多长。...Snip20160415_3.png trait collection 是视图控制器(UIViewController类或者其子类实例)或者视图(UIView类或者其子类实例)属性,因为UIViewController

6.4K50

【IOS开发基础系列】UIViewController专题

,开发者应该切出view移除,切入view加入到该view容器。...-(void)animateTransition:(id)transitionContext;         在进行切换时候调用该方法,我们对于切换时UIView设置和动画都在这个方法完成。...在现在SDK,如果当前VC是被显示的话,这个消息会被直接转发到显示VC去。但是这并不是一个好实现,违反了程序设计哲学,也很容易掉到坑里,具体案例可以参看这篇文章评论。         ...信息,使用context方法拿到它们参照;     2.对于要呈现VC,我们希望它从屏幕下方出现,因此初始位置设置到屏幕下边缘;     3.view添加到containerView;     ...我们在手势识别只需要告诉这个类实例当前状态百分比如何,系统便根据这个百分比和我们之前设定迁移方式我们计算当前应该UI渲染,十分方便。

43030

iOS 自定义 ViewController 过渡动画

动画预览 相关链接 WWDC 2013 session 218: Custom Transitions Using View Controllers 开扯 最近在朋友圈看到别人转发了一系列很帅 iOS...我们只涉及第二种 UITabBarController 另外还有 Interactive view controller transitions 可交互过渡,例子就是在 NavigationController 详细页面从屏幕左侧滑入以返回时那个动画...有两个方法需要实现 // 这个方法负责做真正动画,输入参数是过渡上下文,从哪个VC过渡到哪个VC这些东西都可以从它得到。...然后给这个 ShapeLayer path 属性加动画,从半径0变化到覆盖整个目标 VC 。...并且开始时path设置上面的start——位置在点击tab上一个半径0圆。 // 下文中就要给这个path加特技,让他变化到包含整个界面那么大。

1.3K31

【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

触摸背景关闭虚拟键盘 (1) 修改 Custom Class  修改背景类别 :  -- 修改原因 : 默认背景控件时 UIView, 该控件没有 IBAction 事件, 因此需要将背景控件设置...UIScrollView 属性简介 (1) UIScrollView 简介 UIScrollView 简介 :  -- 显示内容多 : 可滚动控件, 可以使用手指拖动控件内容, 在其中可以显示多个屏幕内容...背景控件设置 UIControl : 之前 UIView 不能响应点击事件, 在身份检查器 面板 Custom Class 由 UIView 修改为 UIControl; -- 2....按钮设置到工具条 :  //按钮放在集合 NSArray * buttonArray = [NSArray arrayWithObjects:buttonItem, spaceItem...设置菜单附加按钮 :  //设置菜单附加按钮 [menu setMenuItems:[NSArray arrayWithObject:delete]]; (2) 源码示例 源码示例

6.6K20

【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

; (9) Highlighted 属性 Highlighted 属性 :  -- 作用 : UILabel 文本设置高亮显示, 前提 Behavior 属性 Highlighted 属性勾选...: 左边显示 界面设计文件, 右边显示 UIViewController 类; -- 拖动控件到 UIViewController : 按住 control 键, 控件拖到 UIViewController.h...文件 : 按住 control 键不放, 按钮拖动到 UIViewController ; -- 设置 IBAction 属性 : 在接下来弹出对话框 Connection 列表设置 ...: 点击 界面设计文件 UIView 根控件, 使用 command + option + 3 打开身份检查器, 由身份检查器上可以看到 其 Custom Class 属性 UIView, 因此该界面的根控件时...UIView; -- 创建自定义类 : 选择菜单 File -> New File -> Cocoa Touch -> Objective-C Class; -- OCFollowTouchView.h

4.9K30

iOS14开发-入门知识

UIViewUIViewController 初步印象 iOS 开发,一个界面就是一个 UIViewController(视图控制器),界面上显示内容就是 UIView(视图)。...UIViewUIViewController关系 UIViewController 默认有一个和屏幕一样大 UIViewUIViewController 管理着它生命周期。...所有放在界面上 UI 控件都放在 UIViewController UIView 之上,在 UIViewController 代码可以通过self.view属性获取它。...开发其他 UIView(及其子类)都放在该view上。 UIViewControllerUIView生命周期函数 viewDidLoad:View 完成内存加载。...UIView添加到UIViewControllerView.png UIView容器概念 UIView 可以放其他 UIViewUIView 层次关系(平级与包含)。

2.9K40

玩转iOS转场动画 原

二、UIViewController进行模态跳转转场     首先,使用CoreAnimation框架CATransition类也可以实现视图控制器转场动画,前面的博客有过讨论,这里不再重复。...: //这个函数用来设置当执行present方法时 进行转场动画 /* presented要弹出Controller presenting当前Controller source源Contrller...,present动画修改成了从右侧滑入,但是dismiss动画依然是默认从下方划出。...下面我们来分析下transitionContext这个对象,这个对象实际上是一个转场上下文,使用它来进行动画定义和执行: //容器视图 用来表现动画 @property(nonatomic, readonly...我们在使用系统导航控制器时,右划返回效果对用户体验十分友好,我们下面就来试着视图控制器模态跳转设计成类似导航可交互

1.3K51

Android仿新版微信浮窗效果

在新版微信中,可以把浏览文章缩小浮窗.点击浮窗继续阅读.对于经常在微信里阅读的人来说,这简直就是人类之光. 微信效果如下 ? 微信效果 对于这功能我进行了仿写. 效果如下 ?...)transitionContext{ return kAuration;//动画时间 } - (void)animateTransition:(id)transitionContext { //获取上下文...CGRectMake(0, 0,SCREEN_WIDTH, SCREEN_HEIGHT) cornerRadius:floatBallRect.size.width/2]; //.layer.mask 是部分显示原因...= [UIColor blackColor]; _coverView.alpha = 0.5; }; return _coverView; } 解耦 所有代码集中在 #import “HKFloatManager.h...” //在AppDelegate中将类名传入即可,在该类控制器侧滑返回时启动浮窗功能(需要在实例化导航控制器之后) [HKFloatManager addFloatVcs:@[@"HKSecondViewController

89720

UIViewController生命周期

,可以简单理解显示在最前面的windowkeywindow) Push到下一层顺序 viewWillDisappear->viewWillAppear->viewDidDisappear->viewDidAppear...当挂起时,程序还是停留在内存,当系统内存低时,系统就把挂起程序清除掉,前台程序提供更多内存。...2、UIWindow主要作用有: 1.作为UIView最顶层容器,包含应用显示所有的UIView; 2.传递触摸消息和键盘事件给UIView; 把view添加到uiwindow 3、把view...添加到uiwindow上面 (1)直接控制器view添加到UIWindow,并不理会它对应控制器 [self.window addsubview:vc.view]; (2)设置uiwindow...根控制器,自动rootviewcontrollerview添加到window,负责管理rootviewcontroller生命周期 [self.window.rootviewcontroller

1.8K10

iOS---iPad开发及iPad特有的特技

iPad开发简单介绍 iPad开发最大不同在于iPhone就是屏幕控件适配,以及横竖屏旋转。 Storyboard得SizeClass横竖屏配置,也不支持iPad开发。...1.在控制器得到设备旋转方向 在 iOS8及以后,屏幕就只有旋转后屏幕尺寸之分,不再是过期旋转方向。...内容控制器设置方法 self.preferredContentSize self.contentSizeForViewInPopover /ios7过时/ 3>设置在什么地方显示 调用方法 /*...* @param rect 指定箭头所指区域矩形框范围(位置和尺寸) * @param view rect参数是以view左上角坐标原点(0,...:YES] 4.iPad特有的UISplitViewController使用 a.masterViewController 1>masterViewController(主要控制器) 2>负责展示主要菜单内容

2.5K70

Cocoa编程中视图控制器与视图类详解

UIView是iPhone屏幕上很多控件基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊UIView)内众多UIView及其专门化子类构建。...进度与活动: UIActivityIndicatorView UIProgressView  控制器类 UIViewController类       UIViewController负责创建其管理视图及在低内存时候将它们从内存移除...UIView视图使用initWithFrame:初始化,而其UIViewController则使用init类方法直接初始化。3....UIViewController实例负责设置视图外观和它显示子视图。 UINavigationController类 1. 导航控制器使用内置动画在视图之间切换; 2....通过调用initWithRootViewController:方法可以特定控制器设置根。

5K50

【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

; 该界面元素被嵌套在了 父控件 UIView , 这些界面控件就是 子控件 ; 下图是 Main.storyboard 截图; ---- ( 4 ) UIViewController...UIView ; 2.UIViewController 作用 : UIViewController 负责 ① 管理 UIView 生命周期 创建 显示 销毁, ② 监听 UIView 内部控件事件响应..., ③ 控制 UIView 与 用户之间进行交互 ; 3.UIViewController 开发环境对应关系 : 选中界面 View Controller 元素, 然后去 属性面板 对应...2.设置View子控件按钮及点击事件 : 一个按钮控件拖入 UIView 控件, 修改文字 改变颜色; 这里尝试一种新方法来进行按钮点击方法设置; ① 进入辅助编辑器模式 :...; 2.拖线 白色 UIView 传入 UIViewController.m : 按住 control 不放, 左键拖动 白色 UIView 控件, 拖动到 ViewController.m

4.7K30

iOS14开发-触摸与手势识别

如果能,那么 UIWindow 会从后往前遍历自己UIView事件向下传递。...响应者对于触摸事件响应和传递都是在touchesBegan方法完成。该方法默认是事件顺着响应者链向上传递,即将事件交给上一个响应者进行处理。...默认next对象: (1)UIView:若当前响应者是 UIViewController view,则next是 UIViewController,否则上一个响应者是其父 UIView。...(2)UIViewController:若当前响应者是 UIWindow rootViewController,则next是 UIWindow;若是被 present 显示则next是presentingViewController...手势添加到需要 UIView 上。每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定一样,回调方法就会调用。

2.2K20
领券