gpt4 book ai didi

ios - 将 touchesMoved 保持在 View Controller 的范围内

转载 作者:行者123 更新时间:2023-11-29 11:13:32 26 4
gpt4 key购买 nike

我有一个拼图类型的应用程序,用户可以在其中拾取 40 个拼图 block 中的任意一个并将它们拖到屏幕上。在测试中,我注意到一些用户不小心将棋子掉到了屏幕边界之外,并且棋子无法取回。

如何指定不能将片段移出 View 边界?

谢谢。

最佳答案

我倾向于采用一种策略,当触摸结束时,我会检查所讨论的 CGRect 的边界是否在父 View 的矩形之外。如果是,那么我将其设置为动画并返回到 View 中。

我不确定这将如何实现,因为我通常将 UIPanGestureRecognizer 用于这些类型的行为,这将允许我访问正在移动的 View 对象。也就是说,如果 View 对象是一个 ivar,它看起来就像这样。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

//note: pieceView is your ivar for the view being moved.
CGRect screenRect = [[UIScreen mainScreen] bounds];
void(^animationBlock)(void);

if ((pieceView.frame.origin.x + pieceView.frame.size.width) > screenRect.size.width) { //outside right side
animationBlock = ^{
int newXVal = (screenRect.size.width - (pieceView.frame.size.width/2));
pieceView.center = CGPointMake(newXVal, pieceView.center.y);
};
}
else if (pieceView.frame.origin.x < 0.0f) { //outside left side
animationBlock = ^{
int newXVal = -(pieceView.frame.size.width/2);
pieceView.center = CGPointMake(newXVal, pieceView.center.y);
};
}
else if ((pieceView.frame.origin.y + pieceView.frame.size.height) > screenRect.size.height) { //outside bottom
animationBlock = ^{
int newYVal = (screenRect.size.height - (pieceView.frame.size.height/2));
pieceView.center = CGPointMake(pieceView.center.x, newYVal);
};
}
else if (pieceView.frame.origin.y < 0.0f) { //outside top
animationBlock = ^{
int newYVal = -(pieceView.frame.size.height/2);
pieceView.center = CGPointMake(pieceView.center.x, newYVal);
};
}

[UIView animateWithDuration:0.2 animations:animationBlock];

}

如果您最终使用 UIPanGestureRecognizer,那么您可以通过访问平移手势识别器的 View 属性来访问您正在移动的 View 。

关于ios - 将 touchesMoved 保持在 View Controller 的范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449686/

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