- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿伙计们,我试图让一个 View 出现在父 View 中的长按上,并使其可拖动和可收缩,但就像现在一样,我只能使它成为可拖动的,但收缩不起作用。这是我的代码
class MainVC: UIViewController, UIGestureRecognizerDelegate {
// MARK: Intializer
public init() {
super.init(nibName: nil, bundle: nil)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: View controller lifecycle methods
public override func loadView() {
self.view = MainView()
}
override func viewDidLoad() {
super.viewDidLoad()
let longpressed = UILongPressGestureRecognizer(target: self, action: #selector(longpressedAction(_:)))
longpressed.minimumPressDuration = 0
longpressed.numberOfTouchesRequired = 2
self.rootView.addGestureRecognizer(longpressed)
// let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapAction(_:)))
// tap.numberOfTouchesRequired = 2
// self.rootView.addGestureRecognizer(tap)
}
// MARK: Stored Properties
private var circleView: ShapeView!
}
// MARK: - Views
extension MainVC {
public unowned var rootView: MainView { return self.view as! MainView } // swiftlint:disable:this force_cast
}
// MARK: - Action Functions
extension MainVC {
@objc func longpressedAction(_ sender: UILongPressGestureRecognizer) {
if sender.state == .began {
self.addCircle(gesture: sender)
} else if sender.state == .changed {
let location = sender.location(in: self.view)
self.circleView.center = CGPoint(
x: view.center.x + (location.x - view.center.x),
y: view.center.y + (location.y - view.center.y)
)
} else if sender.state == .ended{
self.circleView.removeFromSuperview()
}
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == self.circleView.pinchRecognizer {
return true
} else {
return false
}
}
@objc func pinchAction(_ sender: UIPinchGestureRecognizer){
print("PINCHING")
let scale = sender.scale
self.circleView.transform = self.circleView.transform.scaledBy(x: scale, y: scale)
sender.scale = 1.0
}
}
// MARK: - Helper Function
extension MainVC {
func addCircle(gesture: UIGestureRecognizer) {
let tapPoint = gesture.location(in: self.rootView)
let pinchRecog: UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(_:)))
self.circleView = ShapeView(origin: tapPoint, pinchRecognizer: pinchRecog)
self.circleView.pinchRecognizer.delegate = self
self.rootView.addGestureRecognizer(pinchRecog)
self.rootView.addSubview(self.circleView)
}
}
这里是长按两根手指会出现的形状的 View
import Foundation
import UIKit
import CoreGraphics
class ShapeView: UIView {
let size: CGFloat = 150.0
var circleLayer: CAShapeLayer!
var circlePath: UIBezierPath!
var roundRect: CGRect!
var pinchRecognizer: UIPinchGestureRecognizer
init(origin: CGPoint, pinchRecognizer: UIPinchGestureRecognizer) {
self.roundRect = CGRect(x: 0.0, y: 0.0, width: self.size, height: self.size)
self.pinchRecognizer = pinchRecognizer
super.init(frame: self.roundRect)
self.center = origin
self.circlePath = UIBezierPath(roundedRect: self.roundRect, cornerRadius: 10)
self.circleLayer = CAShapeLayer()
self.circleLayer.path = circlePath.cgPath
self.circleLayer.fillColor = UIColor.clear.cgColor
self.circleLayer.strokeColor = UIColor.red.cgColor
self.circleLayer.lineWidth = 10.0
self.circleLayer.strokeEnd = 1.0
// Add the circleLayer to the view's layer's sublayers
layer.addSublayer(self.circleLayer)
// self.initGestureRecognizers()
}
// We need to implement init(coder) to avoid compilation errors
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func initGestureRecognizers() {
let pinchGR = UIPinchGestureRecognizer(target: self, action: #selector(didPinch(pinchGR:)))
addGestureRecognizer(pinchGR)
let panGR = UIPanGestureRecognizer(target: self, action: #selector(didPan(panGR:)))
addGestureRecognizer(panGR)
}
@objc func didPinch(pinchGR: UIPinchGestureRecognizer) {
print("hahahah")
self.superview!.bringSubview(toFront: self)
let scale = pinchGR.scale
self.transform = self.transform.scaledBy(x: scale, y: scale)
pinchGR.scale = 1.0
}
@objc func didPan(panGR: UIPanGestureRecognizer) {
self.superview!.bringSubview(toFront: self)
var translation = panGR.translation(in: self)
self.center.x += translation.x
self.center.y += translation.y
panGR.setTranslation(CGPoint.zero, in: self)
}
}
我目前正在为它使用协调器模式,这里是代码的存储库 https://github.com/aoiserizawa/kurayami/tree/master/kurayami
最佳答案
在我添加之后它现在可以工作了:
extension MainVC: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
使长按可以使用多个手势。请在我的 github 帐户上查看更新后的代码
关于ios - 快速手势识别器 longpress with pinch and drag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424857/
这段代码一直有效,直到我将我的项目从 ios4 转换为 ios6 (+ARC) 并将我的 xib 文件换成 Storyboard。现在我所做的任何点击都算作长按。 手势设置 - (void)viewD
我在我的集合 View 中使用 UILongPressGestureRecognizer,我希望长按手势识别器只有在满足特定条件时才能工作。 NSString *check; if([check
我将更改fabric.js中长按的延迟(使用eventjs构建),但它没有改变。我做错了什么? canvas.on('touch:longpress', longPress, { de
我的表格 View 单元的 UI 遇到奇怪的交互缺陷。我实现了长按手势: func handleLongPress(sender:UILongPressGestureRecognizer!) {
我已经尝试了一段时间来完成这项工作。这种方法似乎在互联网上的几个地方都有效,但不适合我。请注意,当我在手机上尝试时,这在 Dreamweaver(和 chrome)中有效,但在 Eclipse Ind
在我的 GestureDetector 中调用 LongPress 后,如何监听移动事件? 当用户 LongClick 时,他开始选择模式,并且可以将一个正方形拖到屏幕中。但是我注意到在消费了 Lon
当 customView 执行 longPress 时,我想在 customView 上启用 UIPanGestureRecognizer。 (我希望当你longPresscustomView时,cu
我正在尝试使 imageView 在长按时增加尺寸,并在我取消按下后恢复正常。 public class MainActivity extends Activity { private class E
嘿伙计们,我试图让一个 View 出现在父 View 中的长按上,并使其可拖动和可收缩,但就像现在一样,我只能使它成为可拖动的,但收缩不起作用。这是我的代码 class MainVC: UIViewC
我有一个 ListFragment Activity 。 我想为 onItemClickedLongPress 创建一个方法,以便当用户执行此操作时。弹出一个菜单。我熟悉创建菜单。 因此,如果有人愿意
我有一个 UITableView,我正在向它的 UITableViewCell 添加一个 UILongPressGestureRecognizer,如下所示: // Setup Event-Handl
目前我正在开发一个电子邮件应用程序,并希望通过我的应用程序打开所有带有 mailto 方案的链接,而不是默认的 Apple 邮件应用程序。 例如,我有一个这样的链接 mailto_test 在 UIW
我正在开发一个简单的 android 应用程序,我的要求是, “在屏幕上发生一些移动事件(MotionEvent.ACTION_MOVE 为真)后,如果用户在某处停止移动几秒钟而没有将手指从屏幕上移开
这似乎是一个有点奇怪的问题。我在迭代 tableViewCell 中有一个 UIButton在 tableView那是放在常规的ViewController .出于某种原因,它在长按时看起来只是被点击
我需要在适用于 Android 和 iOS 的 Flutter 行元素上实现长按选择。有什么帮助吗? 到目前为止我的代码: class ListElement extends StatelessWid
https://drive.google.com/file/d/0B0alJDsAgypmSElpZUZ1U05zcGM/view?usp=sharing我想要这样的东西,我检查了弧形菜单,但是我们点
我希望用户能够长按 volumeUp 硬件按钮以跳过歌曲,并在短按时执行常规的 volumeUp 操作。 我能够区分两者(我发现 this solution,使用 onKeyDown、onKeyLon
我尝试使用长按手势和配置为连续更新的步进器来设置 View 。长按时,不会出现步进器的连续特征。目前,我已禁用长按。我想我不需要它。但为了将来引用,我将如何允许两者共存? 需要明确的是,这是我尝试此操
All Boxes 是 UITextField。我想在用户长按 UITextField 时更改背景颜色。 长按哪个TextField UITextField颜色变了,不是所有的UITextField
在没有释放屏幕(使用手势检测器)的情况下调用 Longpress 后应该如何调用滚动事件? 这是我的类(class): public class TestingGestureDetector exte
我是一名优秀的程序员,十分优秀!