gpt4 book ai didi

cocoa-touch - 如何使用触摸移动 UIImageView

转载 作者:行者123 更新时间:2023-12-04 02:36:32 26 4
gpt4 key购买 nike

我正在尝试为我的 imageView 创建移动功能(下面代码中的 maskPreview),以便用户可以在屏幕周围移动包含在 maskPreview 中的图片。这是我的触摸开始和触摸移动代码:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([touches count]==1) {
UITouch *touch= [touches anyObject];
originalOrigin = [touch locationInView:maskPreview];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([touches count]==1) {
UITouch *touch = [touches anyObject];
CGPoint lastTouch = [touch previousLocationInView:self.view];
CGFloat movedDistanceX = originalOrigin.x-lastTouch.x;
CGFloat movedDistanceY = originalOrigin.y-lastTouch.y;
[maskPreview setFrame:CGRectMake(maskPreview.frame.origin.x+movedDistanceX, maskPreview.frame.origin.y + movedDistanceY, maskPreview.frame.size.width, maskPreview.frame.size.height)];
}
}

但我从应用程序中得到了一些奇怪的回应。我没有限制 imageview 可以移动多远,即防止它离开屏幕,但即使是一个小 Action ,我的 imageview 也会变得疯狂并消失。

非常感谢所有的帮助

最佳答案

实现 touchesBegan在这个现代世界中,这样的做法太过分了。你只是把自己搞糊涂了,你的代码很快就会变得无法理解或维护。使用 UIPanGestureRecognizer;这就是它的用途。使用 UIPanGestureRecognizer 使 View 可拖动是微不足道的。这是使 View 可拖动的 UIPanGestureRecognizer 的 Action 处理程序:

- (void) dragging: (UIPanGestureRecognizer*) p {
UIView* vv = p.view;
if (p.state == UIGestureRecognizerStateBegan ||
p.state == UIGestureRecognizerStateChanged) {
CGPoint delta = [p translationInView: vv.superview];
CGPoint c = vv.center;
c.x += delta.x; c.y += delta.y;
vv.center = c;
[p setTranslation: CGPointZero inView: vv.superview];
}
}

关于cocoa-touch - 如何使用触摸移动 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com