这有点令人费解,但我认为有一种非常简单且有效的方法可以做到这一点。
在我的应用程序中,我的 View 排列在网格中。可以通过手势将 View 移动到任何位置。问题是在手势事件之后使 View 排序到正确的位置。基本上我就是这样做的。有点效果,但还不正确。
注意: View 的标签将始终更新到 View 在网格中的当前位置。
下面是我用来排序的代码,这里是a link to the actual project in a zip file 。
-(void)sortViews:(UIView*)myView {
__block int newIndex;
// myView is the view that was moved.
[viewsArray removeObject:myView];
[viewsArray enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop){
if (myView.center.x > view.center.x) {
if (myView.center.y > view.center.y) {
newIndex = view.tag -1;
*stop = YES;
} else {
newIndex = view.tag +1;
*stop = YES;
}
} else if (myView.center.x < view.center.x) {
if (myView.center.y > view.center.y) {
newIndex = view.tag -1;
*stop = YES;
} else {
newIndex = view.tag +1;
*stop = YES;
}
}
}];
if (newIndex < 0) {
newIndex = 0;
} else if (newIndex > 5) {
newIndex = 5;
}
[viewsArray insertObject:myView atIndex:newIndex];
[UIView animateWithDuration:.4 animations:^{
[self arrangeGrid];
}];
}
最佳答案
您可以将所有 View 的原始位置存储在一个数组中(比如说positionArray
),然后当您移动 View “A”时继续检查 View “A”的当前位置与positionArray
中存储的位置,如果 View 在任何存储位置的范围内,只需交换 View 的位置“A” 具有 View “A” 已进入其范围的 View 。
希望对您有所帮助
关于ios - 在通过手势将 View 移动到新位置后对网格中的 View 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841792/