我有一个UIView,我正在改变它的中心但是UIView没有移动。
pLocation是在NIB文件中创建的UIView *。我试图改变它的中心(或框架或任何真正的东西)。这是我目前的测试用例。
- (void)Update {
[mWorldObj Update];
static float xVal = 10;
xVal += 0.1;
NSLog(@"Before Loc X: %f Y: %f", pLocation.center.x, pLocation.center.y);
pLocation.center = CGPointMake(xVal, 100.0);
[pLocation setNeedsDisplay]; //Test
[pLocation setNeedsLayout]; //Test
pLocation.hidden = !pLocation.hidden; //Test - Hide and unhide to force re-draw
NSLog(@"After Loc X: %f Y: %f - Frame %f %f", pLocation.center.x, pLocation.center.y, pLocation.frame.origin.x, pLocation.frame.origin.y);
}
打印出正确数字之前和之后
] Before Loc X: 60.500000 Y: 55.000000
] After Loc X: 10.100000 Y: 100.000000 - Frame -50.400002 45.000000
] Before Loc X: 10.100000 Y: 100.000000
] After Loc X: 10.200001 Y: 100.000000 - Frame -50.299999 45.000000
] Before Loc X: 10.200001 Y: 100.000000
] After Loc X: 10.300001 Y: 100.000000 - Frame -50.199997 45.000000
但视图从不在屏幕上移动。如何强制重新绘制视图?
编辑:
我有动画,手动播放,与其他按钮混乱。当我添加将位置移动到该动画时:
-(void) EnableButtons {
pInfo.hidden = false;
pMore.hidden = false;
//SetLocButtonsClickable(true);
[UIView beginAnimations:@"ShowButtons" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
// Make the animatable changes.
pInfo.alpha = 1.0;
pMore.alpha = 1.0;
pLocation.center = CGPointMake(200, 000); //****Added test code
[UIView commitAnimations];
}
位置移动得很好
答案 0 :(得分:2)
嘿,不知道你的视图层次结构是如何建立的,但是我最近遇到了一个非常类似的问题,这是因为包含的UIView已经调整到比我正在移动的视图小的尺寸,所以在实践中它不能不要移动,因为它是由包含视图的地方保留的。
因此,如果你的pLocation包含在另一个UIView中,那么也可能值得检查它的帧以验证它是否允许pLocation的移动。
答案 1 :(得分:1)
动画只能在主线程上执行。确保从主线程调用动画代码。