Iphone UIView在更改其中心时不移动

Iphone UIView在更改其中心时不移动,iphone,objective-c,uiview,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, pLoc

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

位置移动得很好

嘿,不知道视图层次结构是如何设置的,但我最近遇到了一个非常类似的问题,这是因为包含UIView的大小比我正在移动的视图小,所以实际上它无法移动,因为它被包含它的视图固定在原位


因此,如果您的pLocation包含在另一个UIView中,那么也应该检查它的框架,以验证它是否允许pLocation的移动。

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

尝试将其移动超过0.1,改为2.0。如果这些值是像素,没有0.1像素…0.1的增量有点小,您是否尝试过更大的值,例如5?此外,设置中心已重新绘制视图(不调用
drawRect:
),因此不需要以下三行(并且setNeedsLayout仅对其子视图有影响)。如果您只是隐藏它(pLocation.hidden=YES),它会隐藏吗?视图是否正确连接到插座?@Zaky German:实际上,值不是像素,但在完全规范的视图树中,它确实与像素匹配(在非视网膜设备上;在视网膜设备上,一个点实际上跨越四个像素)。在视图或其父视图之一上设置非标识
变换
,会破坏点到像素的关系。我会查看父视图有多大,但我认为不是这样。我可以用动画移动它。。。请参见上面的编辑。