gpt4 book ai didi

uiview - 使用 UIPanGestureRecognizer 仅在 UIImageview 框架中拖动 UILable

转载 作者:行者123 更新时间:2023-12-01 03:39:35 25 4
gpt4 key购买 nike

UILable 拖入 UIView 框架不在 UIImageView 框架我正在使用以下代码为拖动标签使用 UIPanGestureRecognizer

 UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture1:)];
[panGesture setMinimumNumberOfTouches:1];
[self.imageView setBounds:CGRectMake(self.imageView.frame.origin.x,self.imageView.frame.origin.y ,self.imageView.frame.size.width, self.imageView.frame.size.height)];
[panGesture setMaximumNumberOfTouches:1];
panGesture.delegate=self;
[title addGestureRecognizer:panGesture];
panGesture = nil;

还有我的行动方法
-(void)handlePanGesture1:(UIPanGestureRecognizer *)sender
{

CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.imageView];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)

{

firstX = [[sender view] center].x;
firstY = [[sender view] center].y;
}

translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);

[[sender view] setCenter:translatedPoint];
}

最佳答案

好吧,您应该使用以下内容限制您的 x,y:

    CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.frame) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.frame) - (CGRectGetHeight(sender.view.bounds) /2.0f);

CGFloat minPossibleX = CGRectGetMinX(self.imageView.frame) + CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMinY(self.imageView.frame) + CGRectGetMidY(sender.view.bounds);


CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);

CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);

translatedPoint = CGPointMake(actualX, actualY);

我假设您的标签不是您的 imageView 的 subview 。如果您的标签是 imageView 的 subview :
    CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.bounds) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.bounds) - (CGRectGetHeight(sender.view.bounds) /2.0f);

CGFloat minPossibleX = CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMidY(sender.view.bounds);


CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);

CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);

translatedPoint = CGPointMake(actualX, actualY);

编辑:我已经在一个测试项目中成功测试了这个方法:
-(void)handlePanGesture1:(UIPanGestureRecognizer *)sender
{

CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.imageView];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)

{

firstX = [[sender view] center].x;
firstY = [[sender view] center].y;
}

translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);

CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.bounds) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.bounds) - (CGRectGetHeight(sender.view.bounds) /2.0f);

CGFloat minPossibleX = CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMidY(sender.view.bounds);


CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);

CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);

translatedPoint = CGPointMake(actualX, actualY);
[[sender view] setCenter:translatedPoint];
}

关于uiview - 使用 UIPanGestureRecognizer 仅在 UIImageview 框架中拖动 UILable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31801248/

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