我正在开发一个应用程序,其中两个视图在屏幕上的某个位置相遇。当它们相遇时,碰撞检测器就会触发这种方法。它应该识别适当的基础,然后将两个视图发送给它。它确实如此,但它会立即发生而不是4秒钟。我错过了什么? RADIUS在此代码之上定义。这与箭头不是UIView有什么关系吗? spriteView类是UIView的子类。
-(void)sendToBase:(spriteView *)arrow
{
int teamNumber = arrow.teamNumber;
// Find the location of the base.
for (UIView *scaledView in self.view.subviews) {
if (scaledView.tag == 100) {
for (UIView *base in scaledView.subviews) {
if (base.tag >= 1000) {
if (teamNumber + 1000 == base.tag) {
// We found the right base.
CGPoint newCenter;
newCenter.x = base.center.x + arc4random() % (int) floor(RADIUS) - RADIUS/2.0;
newCenter.y = base.center.y + arc4random() % (int) floor(RADIUS) - RADIUS/2.0;
[UIView animateWithDuration:4.0 delay:0.0 options:UIViewAnimationCurveLinear animations:^{
[arrow setCenter:newCenter];
} completion:^(BOOL finished) {
// After walking back to base, remove and create new objects
[arrow removeFromSuperview];
[self addArrow:scaledView toTeam:teamNumber];
}];
}
}
}
}
}
}
由于类型不匹配是问题的可能性,因此我修改了代码,结果相同。
-(void)sendToBase:(spriteView *)arrow
{
UIView *uiSpriteView = (UIView *)arrow;
int teamNumber = arrow.teamNumber;
// Find the location of the base.
for (UIView *scaledView in self.view.subviews) {
if (scaledView.tag == 100) {
for (UIView *base in scaledView.subviews) {
if (base.tag >= 1000) {
if (teamNumber + 1000 == base.tag) {
// We found the right base.
CGPoint newCenter;
newCenter.x = base.center.x + arc4random() % (int) floor(RADIUS) - RADIUS/2.0;
newCenter.y = base.center.y + arc4random() % (int) floor(RADIUS) - RADIUS/2.0;
[UIView animateWithDuration:4.0 delay:0.0 options:UIViewAnimationCurveLinear animations:^{
[uiSpriteView setCenter:newCenter];
} completion:^(BOOL finished) {
// After walking back to base, remove and create new objects
[arrow removeFromSuperview];
[self addArrow:scaledView toTeam:teamNumber];
}];
}
}
}
}
}
}
答案 0 :(得分:0)
根据文档,您必须使用beginAnimations:context:
和commitAnimations
方法为center
属性设置动画。
答案 1 :(得分:0)
我解决了问题(使用setCenter)。有两个动画正在进行中。
第一个动画发生在碰撞之前。 第二个动画是由于碰撞而发生的。
检测碰撞(从而产生第二个动画)的代码位于动画块而不是完成块中。当我将代码移动到完成块时,第二个动画工作。好吧,差不多。两个箭头中的一个正确动画。我现在可能会发现另一个问题,因为其中一个正在发挥作用。