如何在 UIView 上移动手指时添加图像?

Posted

技术标签:

【中文标题】如何在 UIView 上移动手指时添加图像?【英文标题】:How to add images while moving finger across UIView? 【发布时间】:2012-11-06 04:00:24 【问题描述】:

在屏幕上移动手指时,我在跨视图添加图像时遇到问题。

目前它正在多次添加图像,但将它们挤压得太近,并没有真正跟随我的触摸。

编辑:

我想要什么:

拍摄或选择图像后,用户可以从列表中选择另一张图像。我希望用户在视图中触摸并移动他们的手指,所选图像将出现在他们拖动手指的位置,而不会在每个位置重叠。

这行得通:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

     UITouch *touch = [touches anyObject];
     currentTouch = [touch locationInView:self.view];

     CGRect myImageRect = CGRectMake(currentTouch.x, currentTouch.y, 80.0f, 80.0f);
     myImage = [[UIImageView alloc] initWithFrame:myImageRect];
     [myImage setImage:[UIImage imageNamed:@"dot.png"]];
     [self.view addSubview:myImage];
     [myImage release];

新问题:如何在其中添加空格以使图像在视图上绘制时不那么紧贴?

【问题讨论】:

当用户的手指在视图上移动时,您希望图像随用户的手指一起移动吗? 没有。我想在用户移动手指时在视图上多次添加图像。像你的画一样思考,但不是纯色,而是图像。 现在我知道你的意思了,等我写代码测试一下。 【参考方案1】:

您可能想更多地解释您的问题,您到底想达到什么目标!如果您不希望图像重叠,可以试试这个!

UITouch * touch = [touches anyObject];
touchPoint = [touch locationInView:imageView];
prev_touchPoint = [touch previousLocationInView:imageView];

if (ABS(touchPoint.x - prev_touchPoint.x) > 80 
    || ABS(touchPoint.y - prev_touchPoint.y) > 80) 

   _aImageView = [[UIImageView alloc] initWithImage:aImage];
   _aImageView.multipleTouchEnabled = YES;
   _aImageView.userInteractionEnabled = YES;
  [_aImageView setFrame:CGRectMake(touchPoint.x, touchPoint.y, 80.0, 80.0)];
  [imageView addSubview:_aImageView];
  [_aImageView release];

【讨论】:

【参考方案2】:

我很抱歉,因为我在公司,我不能发布太大的数据(代码)。挤压是因为您没有检查接触点与最后一个接触点的距离。检查一个点是否在视图中:bool CGRectContainsPoint (CGRect rect,CGPoint point);我的意思是记住touchesBegan:中的一个接触点。如果touchesMomved: 中的新触摸大于图像的宽度或左侧,请更新它。并将添加图像视图放在一个方法中并调用它使用- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

【讨论】:

【参考方案3】:

你也可以使用 UISwipeGestureRecognizer 代替 touchesMoved 方法,同时在屏幕上滑动。在 viewDidload:method 中,

UISwipeGestureRecognizer *swipeup = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipedone:)];
swipeup.direction = UISwipeGestureRecognizerDirectionUp;
swipeup.numberOfTouchesRequired=1;
[self.view addGestureRecognizer:swipeup];

方法定义:

-(IBAction)swipedone:(UISwipeGestureRecognizer*)recognizer

    NSLog(@"swiped");
    UIImageView* _aImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1.png"]];
    _aImageView.frame = CGRectMake(10, 10, 100, 100);
    _aImageView.multipleTouchEnabled = YES;
    _aImageView.userInteractionEnabled = YES;
    CGPoint point = [recognizer locationInView:recognizer.view];
    [_aImageView setFrame:CGRectMake(point.x, point.y, 80.0, 80.0)];
    [self.view addSubview:_aImageView];
    [_aImageView release];

目前我正在使用此代码向上滑动。我认为它可以正常工作。尝试一下。

【讨论】:

这让我更接近我想要的!我该如何改进它以跟踪我的手指并在它所在的每个新点添加图像?

以上是关于如何在 UIView 上移动手指时添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

在按钮上移动手指时更改 textView

如何在 UIPanGestureRecognizer 中使用两个操作?

当用户触摸屏幕时,删除图像上的模糊效果[关闭]

Objective C 触摸事件问题

触摸时图像失真

转换绘图视图时iOS绘图出错