当改变它的中心时,UIView不动

时间:2011-04-06 20:23:00

标签: iphone objective-c uiview

我有一个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];
}

位置移动得很好

2 个答案:

答案 0 :(得分:2)

嘿,不知道你的视图层次结构是如何建立的,但是我最近遇到了一个非常类似的问题,这是因为包含的UIView已经调整到比我正在移动的视图小的尺寸,所以在实践中它不能不要移动,因为它是由包含视图的地方保留的。

因此,如果你的pLocation包含在另一个UIView中,那么也可能值得检查它的帧以验证它是否允许pLocation的移动。

答案 1 :(得分:1)

动画只能在主线程上执行。确保从主线程调用动画代码。