热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UIKitDynamics下的多手势问题

对一个imageview关联重力行为,使用平移手势,没什么问题。使用捏合手势,运行有问题,可以放大,拖动时变回原来的大小。代码如下,怎么解决呢?

对一个imageview关联重力行为,使用平移手势,没什么问题。使用捏合手势,运行有问题,可以放大,拖动时变回原来的大小。
代码如下,怎么解决呢?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
func handleAttachmentGesture(_ sender: UIPanGestureRecognizer) {

    let location = sender.location(in: emojiSuperView!)

    let boxLocation = sender.location(in: self)

    switch sender.state {

    case .began:

        print("Your touch start position is \(location)")

        print("Start location in image is \(boxLocation)")



        animator.removeAllBehaviors()



        let centerOffset = UIOffset(horizontal: boxLocation.x - self.bounds.midX, vertical: boxLocation.y - self.bounds.midY)

        attachmentBehavior = UIAttachmentBehavior(item: self, offsetFromCenter: centerOffset, attachedToAnchor: location)

        animator.addBehavior(attachmentBehavior)

    case .ended:

        print("Your touch end position is \(location)")

        print("End location in image is \(boxLocation)")



        animator.removeAllBehaviors()



        // 1

        let velocity = sender.velocity(in: emojiSuperView!)

        let magnitude = sqrt((velocity.x * velocity.x) + (velocity.y * velocity.y))



        if magnitude > ThrowingThreshold {

            // 2

            let pushBehavior = UIPushBehavior(items: [self], mode: .instantaneous)

            pushBehavior.pushDirection = CGVector(dx: velocity.x / 10, dy: velocity.y / 10)

            pushBehavior.magnitude = magnitude / ThrowingVelocityPadding



            self.pushBehavior = pushBehavior

            animator.addBehavior(pushBehavior)



            // 3

            let angle = Int(arc4random_uniform(20)) - 10



            itemBehavior = UIDynamicItemBehavior(items: [self])

            itemBehavior.friction = 0.2

            itemBehavior.allowsRotation = true

            itemBehavior.addAngularVelocity(CGFloat(angle), for: self)

            animator.addBehavior(itemBehavior)

        }

    default:

        attachmentBehavior.anchorPoint = sender.location(in: emojiSuperView!)

        break

    }

}





func recognizePinchGesture(sender: UIPinchGestureRecognizer)

{

    weak var dynamicItem: UIDynamicItem?

    // whatever your item is, probably a UIView

    dynamicItem = self

    let behavior = UIGravityBehavior(items: [dynamicItem!])

    let animator = UIDynamicAnimator(referenceView: emojiSuperView!)

    // or however you're getting your animator

    animator.addBehavior(behavior)

    sender.view!.transform = sender.view!.transform.scaledBy(x: sender.scale, y: sender.scale)

    animator.updateItem(usingCurrentState: self)

    self.animator.updateItem(usingCurrentState: self)

    sender.scale = 1

}



   



推荐阅读
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
author-avatar
_______王晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有