我正在我的工作地点开展一个重要的项目,并且遇到了一个我正在堆叠的问题:
我有一个视图中的2个视图(1个带有图像的滚动视图,另一个只是一个UIImageView),我想使它能够将图像从滚动视图移动到UIImageView),我可以成功识别并移动图像scrollView,但问题是当移动离开scrollView时,丢失的图像消失在后面,无法到达imageView的道路.
有什么建议吗?
我正在搞乱一个xcode项目,当我触摸它时,我正试图让一个红色的球SKShapeNode四处移动.触摸我自己的源代码开始上课并没有做到.我的代码有什么缺陷,我需要做些什么来修复它.
import SpriteKit
class GameScene: SKScene {
//Rectangle Skeletions
var leftWallRect = CGRect(x: 0, y: 0, width: 40, height: 1000)
var ball = SKShapeNode(circleOfRadius: 25);
override func didMoveToView(view: SKView) {
// Declare the Sprites in your scene
var ball = SKShapeNode(circleOfRadius: 25);
let leftWall = SKShapeNode(rect: leftWallRect);
let rightWall = SKShapeNode(rect: leftWallRect);
let pin = SKSpriteNode(imageNamed: "pin");
// Ball Properties
ball.strokeColor = UIColor.blackColor()
ball.fillColor = UIColor.redColor()
ball.position = CGPointMake(self.frame.width / 2 , self.frame.height / 4 - 100 )
self.addChild(ball)
// …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我的touchesBegan方法似乎没有正确响应.如果我用两根手指触摸屏幕,然后将其抬起并再次放下,触摸正确调用.如果我用一根手指触摸屏幕,然后添加第二根手指,touchesBegan就不会被调用.我需要检查一些标志吗?以下示例说明了我的问题:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touch");
}
Run Code Online (Sandbox Code Playgroud)
有什么想法发生了什么?如果重要的话,我正在使用iOS 4.2进行iPad测试.
我试图允许UIButton我的一个视图上的某些实例被触摸并拖动到屏幕上(最终有动量,但这是为了以后!).我有一个非常简单的工作方式,如下所示,但问题是通过触摸按钮开始拖动它,它附着在手指上,并通过抬起手指,触发"Touch Up Inside"事件,这是我想要在实际点击按钮时执行的代码.
简而言之:我如何区分水龙头和拖拽/释放?我是否需要将水龙头更改为短按手势识别器,或类似的?码:
在viewDidLoad中:
[firstButton addTarget: self action: @selector(wasDragged: withEvent:) forControlEvents: UIControlEventTouchDragInside];
Run Code Online (Sandbox Code Playgroud)
我的wasDragged方法:
- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
{
if (button == letter1Button) {
UITouch *touch = [[event touchesForView:button] anyObject];
CGPoint previousLocation = [touch previousLocationInView:button];
CGPoint location = [touch locationInView:button];
CGFloat delta_x = location.x - previousLocation.x;
CGFloat delta_y = location.y - previousLocation.y;
button.center = CGPointMake(button.center.x + delta_x, button.center.y + delta_y);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个UITextView内部UITableViewCell子类.它已经editable并且userInteractionEnabled都设置为NO.这允许UITextView检测诸如链接和电话号码之类的数据.正确检测数据,但由于禁用了userInteraction,因此无法响应该数据的点击.如果我设置userInteractionEnabled为YES,它工作正常,但UITableViewCell由于UITextView吞下触摸,因此无法选择.
如果用户点击它,我想按照链接,但didSelectRowAtIndexPath:如果点击基本文本,我想要被调用.
我认为正确的方法是子类化UITextView并将触摸传递给单元格,但我似乎无法找到一种方法来检测水龙头是否在链接上.
这是一个类似的问题,但答案只是将所有触摸传递给单元格.我想只传递触摸,如果它们不在一块检测到的数据上. 在UITableViewCell中的UITextView上启用dataDetectorTypes
在Xcode 5.1中,我为iPhone 创建了一个简单的测试应用程序:

结构是:scrollView -> contentView -> imageView -> image 1000 x 1000在顶部.
在单一视图应用程序的底部,我有七个可拖动的自定义UIViews.
使用方法在Tile.m中实现拖动touchesXXXX.
我的问题是:一旦我contentView在我的ViewController.m文件中添加了一个可拖动的磁贴- 我就不能再拖动了它:
- (void) handleTileMoved:(NSNotification*)notification {
Tile* tile = (Tile*)notification.object;
//return;
if (tile.superview != _scrollView && CGRectIntersectsRect(tile.frame, _scrollView.frame)) {
[tile removeFromSuperview];
[_contentView addSubview:tile];
[_contentView bringSubviewToFront:tile];
}
}
Run Code Online (Sandbox Code Playgroud)
在touchesBegan没有呼吁Tile了,因为如果scrollView将掩盖这一事件.
我已经四处搜索,并建议UIScrollView使用以下方法扩展该类(在我的自定义GameBoard.m中):
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView* result = …Run Code Online (Sandbox Code Playgroud)
我正在使用Swift 1.2
我正在尝试使用这个UIScrollview touchesbegan,touchesmoved,touchesended actions以及接受的答案的第2条评论中的链接.
我正在使用带有自动布局的故事板,我在自定义类中为UIScrollView设置了我的自定义类.
我没有收到包含我的自定义UIScrollView的UIViewController中的这些触摸事件
编辑:更新了我的代码,了解我如何使用@Victor Sigler的答案.
自定义ScrollView代码:
import UIKit
protocol PassTouchesScrollViewDelegate {
func scrollTouchBegan(touches: Set<NSObject>, withEvent event: UIEvent)
func scrollTouchMoved(touches: Set<NSObject>, withEvent event: UIEvent)
}
class PassTouchesScrollView: UIScrollView {
var delegatePass : PassTouchesScrollViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.delegatePass?.scrollTouchBegan(touches, withEvent: event)
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
self.delegatePass?.scrollTouchMoved(touches, withEvent: event)
}
}
Run Code Online (Sandbox Code Playgroud)
我的ViewController:
import …Run Code Online (Sandbox Code Playgroud) 我遇到的问题是,当您触摸屏幕的左边缘时,第一次打电话或touchesBegan:withEvent:打开电话会延迟.这似乎是iOS 10的一个新问题,并且只发生在具有3D Touch(iPhone 6s和更新版本)的设备上.实际上,如果在General-> Accessibility中禁用3D Touch,问题就会消失.UIViewUIViewController
但是,使用时似乎不会发生此问题UIGestureRecognizers.我现在的解决方法是创建一个UIGestureRecognizer子类来覆盖touches*方法并将它们转发到我的旧实现.
这只是一个错误还是有办法摆脱延迟?
当我触摸屏幕上的任何地方触摸触发事件时触发.但我无法管理如何像UIImageView一样触摸特定对象?
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView: touch.view];
imageView.center = location;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何在 UIView 上添加一个小圆圈/点,但只有当用户点击 UIView 内部时。点应该放在用户点击的任何地方。不幸的是,我不知道如何做到这一点。
任何带有代码的示例都非常有帮助!我正在使用斯威夫特。
touchesbegan ×10
ios ×4
iphone ×4
objective-c ×4
swift ×3
touchesmoved ×3
uiscrollview ×2
xcode ×2
3dtouch ×1
drawing ×1
gesture ×1
ios10 ×1
ios4 ×1
ipad ×1
nsset ×1
sprite-kit ×1
touches ×1
uitableview ×1
uitextview ×1
uitouch ×1
uiview ×1