有人可以告诉我当用户点击屏幕并使其显示在点击位置时如何显示图像。 提前致谢, 泰特
答案 0 :(得分:2)
UIView
是UIResponder
的子类,其中包含以下可能有用的方法:-touchesBegan:withEvent:
,-touchesEnded:withEvent:
,-touchesCancelled:withEvent:
和-touchesMoved:withEvent:
每个参数的第一个参数是NSSet
个UITouch
个对象。 UITouch
有一个-locationInView:
实例方法,可以在您的视图中生成点击位置。
答案 1 :(得分:1)
您可以创建一个初始星,并在每次触摸视图时移动它。 我不确定你的最终结果是什么样的。
注意: 此代码将为您提供一个随点击移动的明星 这是我的代码: -
(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch ([allTouches count]) {
case 1:
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
CGPoint point = [touch locationInView:myView];
myStar.center = point;
break;
}
default:
break;
}
}
答案 2 :(得分:0)
从问题中可以看出,您希望用户能够点按屏幕上的任意位置并在他们点按的位置绘制图像?与在指定地点敲击并在那里出现图像相反?
如果是这样,您可能不得不使用自定义视图。在这种情况下,您可以执行以下操作:
UIView
。touchesBegan
方法。调用[[touches anyObject] locationInView:self]
(其中touches
是方法的第一个参数,NSSet
个UITouch
个对象)以获取触摸的位置,并记录下来。touchesEnded
方法。使用与步骤2中相同的方法确定结束的位置触摸。[self setNeedsDisplay]
以重新绘制自定义视图。drawRect
方法。在此处,如果已在步骤4中设置了位置,则可以使用UIImage
方法drawAtPoint
在所选位置绘制图像。For further details, this link might be worth a look。希望有所帮助!
编辑:我注意到你之前提出过基本相同的问题。如果你对那里给出的答案不满意,通常认为更好地“碰撞”旧答案,可能通过编辑它来要求进一步澄清,而不是创建一个新问题。
编辑:根据要求,下面是一些非常简短的示例代码。这可能不是最好的代码,我还没有测试过,所以它可能有点不确定。仅仅为了澄清,THRESHOLD
允许用户在轻敲(最多3px)时移动他们的手指,因为在不移动手指的情况下很难点击。
MyView.h
#define THRESHOLD 3*3
@interface MyView : UIView
{
CGPoint touchPoint;
CGPoint drawPoint;
UIImage theImage;
}
@end
MyView.m
@implementation MyView
- (id) initWithFrame:(CGRect) newFrame
{
if (self = [super initWithFrame:newFrame])
{
touchPoint = CGPointZero;
drawPoint = CGPointMake(-1, -1);
theImage = [[UIImage imageNamed:@"myImage.png"] retain];
}
return self;
}
- (void) dealloc
{
[theImage release];
[super dealloc];
}
- (void) drawRect:(CGRect) rect
{
if (drawPoint.x > -1 && drawPoint.y > -1)
[theImage drawAtPoint:drawPoint];
}
- (void) touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{
touchPoint = [[touches anyObject] locationInView:self];
}
- (void) touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{
CGPoint point = [[touches anyObject] locationInView:self];
CGFloat dx = point.x - touchPoint.x, dy = point.y - touchPoint.y;
if (dx + dy < THRESHOLD)
{
drawPoint = point;
[self setNeedsDisplay];
}
}
@end