标签: touchesmoved

如何取消一系列UITouch事件?

我有一个UIImage视图响应触摸事件.touchesMoved:如果触摸超出某些范围,我想取消触摸序列,即进一步调用.我怎样才能做到这一点?

我知道在touchesMoved:我可以检查触摸物体的坐标并忽略它,但我不知道的是如何完全取消序列.我没有看到Apple Developer UIResponderReference中记录的任何方法,我可以调用它来取消触摸序列.

iphone uitouch touchesmoved uiresponder ios

20
推荐指数
1
解决办法
2万
查看次数

在不触发touchesCancelled的情况下滚动UIScrollView

概观

我正在开发一款iPhone游戏,其代码我从其他开发者那里继承而来.游戏网格是具有1000x1000的contentSize的UIScrollView.网格包含通过OpenGL的Texture2D类在屏幕上绘制的几个元素.

UIScrollView的滚动方向与手指移动的方向相反.这背后的想法是模拟用手指"筛选"元素的行为,因为触摸路径中的每个元素都应该受到影响/操纵.

 

问题

问题是UIScrollView的滚动会触发touchesCancelled,从而结束游戏依赖的touchesMoved调用,以了解要操作的元素.即使我的手指移动没有在视觉上触发视图滚动,移动我的手指超过10个像素的距离触发touchesCancelled方法,从而结束未来touchesMoved调用,直到我抬起手指并开始新的触摸事件.

我确信这是触发touchesCancelled方法的滚动事件,因为如果我self.scrollingEnabled = NO;在视图上设置,在屏幕上移动手指会继续触发touchesMoved,因为无论我在屏幕上移动手指多远,触摸都会获得当我抬起手指时(在我完成对元素的筛选之后)按预期调用,并且我的触摸/滑动路径中的每个元素确实按照需要进行操作.但是,设置此属性自然会阻止所需的游戏网格滚动.

 

尝试修复失败

我已尝试设置视图self.canCancelContentTouches = NO;initWithFrame方法,但touchesCancelled仍然被触发,奇怪的是.不知道为什么会这样!也许我已经把它放在错误的位置,但我不太确定这甚至可以解决我的问题,因为文档暗示这样的设置会阻止滚动:"如果这个属性的值为NO,一旦内容视图开始跟踪,无论手指移动,滚动视图都不会滚动." 很明显,这不是我追求的行为,所以财产似乎并不是我感兴趣的东西.虽然我仍然感到困惑,为什么它仍然滚动和调用touchesCancelled,但我离题了.

我还添加了方法,- (BOOL)touchesShouldCancelInContentView:(UIView *)view但它没有被调用,即使没有设置,self.canCancelContentTouches = NO;因为文档说将canCancelTouches属性设置为NO确实会阻止调用touchesShouldCancelInContentView方法:"滚动视图不会调用此方法,如果值为canCancelContentTouches属性为NO." .虽然文档似乎不清楚是否从这种方法返回NO也会阻止滚动像canCancelContentTouches = NO;设置那样.如果没有,那么这应该是理想的解决方案.虽然,我不知道为什么这个方法甚至没有被调用,因为文档只提到一个属性/设置阻止它被调用,并且即使该属性未设置为NO仍然没有被调用(因此默认为YES).

 

我从哪里开始?

所以现在我不知所措.事实是我仍然需要touchesMoved才能在视图开始滚动后继续调用.那可能吗?如果没有,我有什么选择?

iphone cocoa-touch objective-c uiscrollview touchesmoved

10
推荐指数
1
解决办法
3300
查看次数

触摸事件由多个视图处理

我有一个子类UIView上的顶部UITableView.我正在使用它UITableView来显示一些数据,同时,我想覆盖手指后面的动画(例如,留下一条线索).

如果我是正确的,我需要的触摸事件要处理两个UIView子和UITableView.我怎样才能做到这一点?是否可以touchesMoved在UIView子类上触发,然后再触发UITableView

非常感谢你的帮助.

touch touchesmoved touch-event ios uievent

9
推荐指数
1
解决办法
1万
查看次数

iOS - 检测UIView中的触摸?

所以我有一个UIView的子类,假设检测触摸.仅当触摸在当前视图内开始时,视图检测才会触摸.当触摸从视图外部开始并且它们在我的自定义视图中移动时,touchesMoved不会被调用.任何解决方案都可以检测当前视图中尚未启动的移动触摸?

@implementation MycustomView

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   // This only gets called if touches have started in the current View
} 

@end
Run Code Online (Sandbox Code Playgroud)

uiview touchesmoved ios

9
推荐指数
1
解决办法
2万
查看次数

Swift:像Agar.io一样光滑的SKCameraNode机芯?

如果之前有人玩过Agar.io,你可能会熟悉相机移动的方式.它会滑向鼠标,具体取决于鼠标距离屏幕中心的距离.我正在尝试使用SKCameraNode和touchesMoved重新创建此运动:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos = touches.first!.location(in: view)
  let center = view!.center
  let xDist = pos.x - center.x
  let yDist = pos.y - center.y
  let distance = sqrt((xDist * xDist) + (yDist * yDist)) * 0.02
  camera?.position.x += xDist * distance * 0.02
  camera?.position.y -= yDist * distance * 0.02
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这看起来并不太糟糕.但是,这有两个问题.

首先,我想为此使用UIPanGestureRecognizer,因为它可以通过多次触摸更好地工作.我无法想象如何做到这一点,因为我无法想到一种方法来使用它来获得从触摸到屏幕中心的距离.

第二个问题是这种运动并不顺利.如果用户停止移动他们的手指一帧,那么由于相机拍摄到绝对停止,因此会有巨大的跳跃.我在数学方面很糟糕,所以我想不出一种方法来实现一个很好的平滑衰减(或攻击).

任何帮助都会很棒!

编辑:我现在这样做:

private var difference = CGVector()

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos …
Run Code Online (Sandbox Code Playgroud)

touchesmoved touchesbegan ios swift skcameranode

9
推荐指数
1
解决办法
451
查看次数

在touchesmoved中用sprite工具包画一条线

我想沿着touchesmoved中收集的点在sprite kit中画一条线.

什么是最有效的方式?我已经尝试了几次,我的线在y轴上是错误的,或者占用了很多处理能力,fps下降到10秒.

有任何想法吗?

touchesmoved ios7 sprite-kit

8
推荐指数
1
解决办法
4933
查看次数

touchesMoved在iPhone 6s及以后的单点击中被调用

我有一个自定义UIButton,我已经在自定义按钮类中实现了触摸委托.

在iPhone 6 Plus之前,每件事情都很好.它上面的所有设备如iPhone 6s和7都会产生问题.

当我点击一个按钮touchesBegan被按预期调用,但touchesMoved也被调用,它在我的代码中产生问题.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     _firstTouch = [[touches anyObject]locationInView:self];
     _isTapped = YES;

     [self.nextResponder.nextResponder  touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
   _isTapped = NO;

   [self.nextResponder.nextResponder touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
if (_isTapped){
    //Functionality
}
Run Code Online (Sandbox Code Playgroud)

为什么要touchesMoved调用这些设备,我该如何解决?

objective-c touchesmoved ios

8
推荐指数
1
解决办法
343
查看次数

iOS:在接触发生时转移UIView的所有权?

我收到的那一刻touchesBegan,我想要removeFromSuperview触摸的视图和addSuperview新的父视图,然后继续接受触摸.但是我发现有时这不起作用.具体来说,touchesMovedtouchesEnded永远不会被调用.

有没有让这项工作正确的技巧?这用于实现拖放行为,其中视图最初位于滚动视图内.

谢谢.

uiscrollview uiview touchesmoved touchesbegan ios

7
推荐指数
2
解决办法
725
查看次数

当存在具有物理主体的SkSpriteNode时,TouchesMoved()滞后非常不一致

我正在使用Swift 3.0,SpriteKit和Xcode 8.2.1,在运行iOS 10.2的iPhone 6上进行测试.

问题很简单......表面上看.基本上我的TouchesMoved()以非常不稳定的速率更新,并且正在破坏游戏中UI的基本部分.有时候它完美地工作,一分钟后它以一半的速率进行更新.

我已经解决了这个问题.只是在具有物理体的场景中有一个SKSpriteNode会导致问题......这是我的GameScene代码:

import SpriteKit
import Darwin
import Foundation

var spaceShip = SKTexture(imageNamed: "Spaceship")

class GameScene: SKScene{

    var square = SKSpriteNode(color: UIColor.black, size: CGSize(width: 100,height: 100))

    override func didMove(to view: SKView) {
        backgroundColor = SKColor.white
        self.addChild(square)
         //This is what causes the problem:
        var circleNode = SKSpriteNode(texture: spaceShip, color: UIColor.clear, size: CGSize(width: 100, height: 100))
        circleNode.physicsBody = SKPhysicsBody(circleOfRadius: circleNode.size.width/2)
        self.addChild(circleNode)
    }
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches{
            var positionInScreen = …
Run Code Online (Sandbox Code Playgroud)

touchesmoved ios sprite-kit swift

7
推荐指数
1
解决办法
677
查看次数

UIScrollView - 告诉setContentOffset和手动滚动之间的区别

我有一个scrollview,每3秒自动前进到下一个"页面"(也使用页面控件).但是,一旦用户触摸滚动视图,我想停止自动前进.

我已经将scrollview子类化了.我可以在子类中检测touchesBegan,但是没有调用touchesMoved,所以我无法判断用户是否手动刷过了scrollview.我不能使用scrollviewDidScroll,因为当我在自动前进计时器触发时设置contentOffset时会调用它.

那么我检测触摸的其他选择是什么?为什么不在scrollview子类上调用touchesMoved?

uiscrollview touchesmoved touchesbegan ios

6
推荐指数
1
解决办法
2225
查看次数