如何:点击时将视图置于前面;设置最大/最小捏合手势比例;将屏幕限制设置为平移手势

2024-03-15

注意:我发现的所有东西都太旧了,或者与我实际需要的东西相差太大,而且我几乎尝试了我发现的所有东西,但没有一个能以正确的方式工作。

我创建了 3 个 UIView,我可以拖动它们并缩放它们。 现在,我需要:

  1. 将其中一些放在前面:我想为每个添加一个 UITapGesture 允许我将点击的 UIView 带到前面 将其他 UIView 传递到后面;
  2. 为 UIPinchGestureRecognizer 设置最大/最小比例,以便我 不能有超大的 UIiews 或微小的 UIViews;
  3. 为 UIPanGestureRecognizer 设置某种屏幕限制,以便我 无法将我的 UIView 拖到主视图之外。

这是我的代码:

https://github.com/marybnq/Views https://github.com/marybnq/Views


我解决了我的问题!

  1. 我想出了如何为 UIPinchGestureRecognizer 设置最大/最小比例,这就是我所做的。
    var recognizerScale:CGFloat = 1.0
    var maxScale:CGFloat = 1.5
    var minScale:CGFloat = 0.8

    @IBAction func handlePinch(_ pinchGesture: UIPinchGestureRecognizer) {
        guard pinchGesture.view != nil else {return}

        if pinchGesture.state == .began || pinchGesture.state == .changed{
            if (recognizerScale < maxScale && pinchGesture.scale > 1.0) {
                pinchGesture.view?.transform = (pinchGesture.view?.transform)!.scaledBy(x: pinchGesture.scale, y: pinchGesture.scale)
                recognizerScale *= pinchGesture.scale
                pinchGesture.scale = 1.0
            }
            if (recognizerScale > minScale && pinchGesture.scale < 1.0) {
                pinchGesture.view?.transform = (pinchGesture.view?.transform)!.scaledBy(x: pinchGesture.scale, y: pinchGesture.scale)
                recognizerScale *= pinchGesture.scale
                pinchGesture.scale = 1.0
            }
        }
    }
  1. 为了将视图带到前面,我创建了多个 UIPanGestureRecognizer 并添加了 BringSubviewToFront:
     @IBAction func handlePan1(recognizer:UIPanGestureRecognizer) {
        let translation = recognizer.translation(in: self.view)
        if let view = recognizer.view {
            view.center = CGPoint(x:view.center.x + translation.x,
                                  y:view.center.y + translation.y)
        }
        view.bringSubviewToFront(view1)
        recognizer.setTranslation(CGPoint.zero, in: self.view)
    }

     @IBAction func handlePan2(recognizer:UIPanGestureRecognizer) {
        let translation = recognizer.translation(in: self.view)
        if let view = recognizer.view {
            view.center = CGPoint(x:view.center.x + translation.x,
                                  y:view.center.y + translation.y)
        }
        view.bringSubviewToFront(view2)
        recognizer.setTranslation(CGPoint.zero, in: self.view)
    }

ecc... 但是如果您还想限制平移手势,则无法执行此操作,因此您可能需要添加点击手势识别器:

将gestureRecognizer添加到您的视图中并设置委托。

@IBAction func tappedView1(recognizer: UITapGestureRecognizer) {
        view.bringSubviewToFront(myView)
    }

在你看来DidLoad:

 let tap = UITapGestureRecognizer(target: self, action: #selector(tappedView1))
        tap.cancelsTouchesInView = false
        self.view.addGestureRecognizer(tap)
  1. 要设置屏幕限制/平移限制,我找到了以下代码:
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
        let translation = recognizer.translation(in: self.view)
        let statusFrame = UIApplication.shared.statusBarFrame


        if let recognizerView = recognizer.view {
            if recognizerView.frame.origin.x < 0.0 {
                recognizerView.frame.origin = CGPoint(x: 0.0, y: recognizerView.frame.origin.y)
            }
            if recognizerView.frame.origin.y < statusFrame.height {
                recognizerView.frame.origin = CGPoint(x: recognizerView.frame.origin.x, y: statusFrame.height)
            }
            if recognizerView.frame.origin.x + recognizerView.frame.size.width > view.frame.width {
                recognizerView.frame.origin = CGPoint(x: view.frame.width - recognizerView.frame.size.width, y: recognizerView.frame.origin.y)

            }
            if recognizerView.frame.origin.y + recognizerView.frame.size.height > view.frame.height {
                recognizerView.frame.origin = CGPoint(x: recognizerView.frame.origin.x, y: view.frame.height - recognizerView.frame.size.height)
            }
        }

        if let centerX = recognizer.view?.center.x, let centerY = recognizer.view?.center.y {
            recognizer.view?.center = CGPoint.init(x: centerX + translation.x , y: centerY + translation.y)
            recognizer.setTranslation(CGPoint.zero, in: self.view)
        }

        view.bringSubviewToFront(view1)
        recognizer.setTranslation(CGPoint.zero, in: self.view)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何:点击时将视图置于前面;设置最大/最小捏合手势比例;将屏幕限制设置为平移手势 的相关文章

  • 在代码 MVC Razor 中渲染部分视图

    我正在使用 MVC 3 Razor 制作一个简单的 CMS 以用于实践目的 我的想法是创建一些部分视图 我想要进行数据库查找 并发现 3 个部分视图需要渲染到页面 我该怎么做 在 WebForms 中 您可以调用 LoadControl C
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • 确定视图是否在屏幕上 - Android

    我对这个有点困惑 首先也是最重要的是 以下链接很有用 但是我提出了一些可见性问题 链接 检查视图可见性 https stackoverflow com questions 4628800 android how to check if a
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 如何扩展 Array 以获得泛型类型?

    我有一个链表类 声明如下 class LinkedNode
  • Rails:使最终用户可以编辑视图?

    无论如何 我可以使最终用户可以编辑 Rails 视图中的内容吗 这样他们就可以在我允许的页面上进行简单的文本更改 而无需我自己编辑 HAML 文件 想法 澄清 我了解 CMS 系统 但我认为这并不完全是我想要的 我想保持对视图的编程控制 但
  • 如何在 Visual Studio 2008 中设置默认 XAML 视图

    在 Visual Studio 2008 中 当您向 WPF 应用程序项目添加新的 XAML 窗口时 您获得的默认视图是 拆分视图 其中可视化设计器和 XAML 代码在同一文档中显示在另一个之上 我更喜欢另一种视图 您可以通过双击 设计 或
  • Android - 如何访问 onResume 中 onCreate 中实例化的 View 对象?

    In my onCreate 方法 我正在实例化一个ImageButton View public void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • CodeIgniter/PHP - 从视图内调用视图

    基本上 对于我的网络应用程序 我正在尝试更好地组织它 目前 每次我想加载页面时 我都必须从控制器中执行此操作 如下所示 this gt load gt view subviews template headerview this gt lo
  • 在 ASP.Net MVC 中的同一视图中分离两个表单

    我已将创建帐户视图和登录视图合并到同一视图中 所以这是一个具有两种表单的视图 但是当我提交时它们会混合在一起 如果我尝试登录并显示错误 Html ValidationSummary 两种形式都会出现错误 我开始将字段重命名为 loginPa
  • Kohana 3.1 中的模板

    我几个月前就用过它们 然后我改用燃料 然后我又切换回 Kohana 问题 我忘记了如何正确使用模板 我的意思是Controller Template 有教程 http kohanaframework org 3 1 guide kohana
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 在 BigQuery 视图中找不到字段

    这可能只是 BQ 中的一个错误 但也许有人可以指出我的一些错误 本质上我想做的是添加一个字段 比如new field 到一个表并将其保存为视图以便稍后查询 当我查询视图时 它会抛出一个关于无法找到该视图的错误new field 复制此错误的
  • iOS 11 /“Apps-prefs=root”功能在更新到 Swift 3 后不起作用

    我对 Swift 编程还很陌生 我制作了一个简单的测试应用程序 可以通过特定按钮以编程方式打开设置 不幸的是 更新按钮后 没有打开所需的设置页面 在本例中为 wifi 页面 而是仅打开通用设置屏幕 有人可以帮助我了解 swift 4 中究竟
  • android 选项卡小部件内列表视图中的滑动事件

    我创建了一个显示列表视图的活动 并且在滑动操作时使用 ViewFlipper 显示另一个列表 代码附在下面 import android app Activity import android os Bundle import androi
  • 从其超级视图 iOS 7 问题中获取 UITableViewCell

    我的单元格中几乎没有具有手势识别器实例的 UI 对象 我需要获取按压对象所在的单元格 我有下面的方法来获取它 但它只在 iOS 7 之前有效 UITableViewCell cell UITableViewCell sender view
  • 具有 Void 关联类型的通用 Swift 4 枚举

    tl dr 是否可以实例化具有关联类型值的通用 Swift 4 枚举成员Void 背景 我正在使用一个简单的Result枚举 类似于反典型结果 https github com antitypical Result enum Result
  • 与 UIActivityViewController 共享 PDF 文件

    我正在尝试使用共享 PDF 文件UIActivityViewController但是当我按下按钮时 我没有共享文件的选项 我怎样才能显示这些选项 https i stack imgur com ywDQw jpg https i stack
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu

随机推荐