我hardWayLabel
在 UIView 中有一个 UILabel, hardWayView
。我需要这个视图(以及标签)来动画到屏幕最左侧的一个新位置。然而,当标签移动到正确的位置时,可以看到视图继续远离屏幕左侧。我将以下代码用于动画(我在我的应用程序中成功使用了很多次):
CGRect frame = hardWayView.frame;
frame.origin.x = painPoint.x;
frame.origin.y = painPoint.y;
hardWayView.frame = frame;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.25];
我已经使用 NSLog 来确保 painPoint.x 和 painPoint.y 是它们应该是 9,这可以通过 UILabel 最终处于正确位置的事实得到证实。我想真正的问题是为什么 UIView 会继续越过屏幕边界(只有在这种情况下 UIView 从屏幕中心向左移动时才会这样做)?
我确实启用了自动布局,但我不认为这是罪魁祸首。当我在带有 iOS 7 的 iPhone 模拟器上运行应用程序时会出现此问题,并且我无法让模拟器在 iOS 6 上运行,因此无法将问题隔离到 iOS 7(虽然可能吗?我开始在旧版本的 Xcode 并且该应用程序不使用情节提要)。
这是该问题的屏幕录像。如您所见,将两个视图从左向右移动正常工作。尽管将视图移回左侧时,其中一个视图(黑色背景)似乎从左上角离开屏幕,而标签(橙色文本)则转到正确的位置)。解说视频
更新:这里有更多代码。它与我的应用程序中完美运行的其他部分几乎相同,这有点像大脑冲击波。
NSString *stringOfRands = tDict[@"originalRand"];
if ([stringOfRands rangeOfString:@"+"].location != NSNotFound)
{
NSArray *arrayOfRands = [stringOfRands componentsSeparatedByString:@" + "];
for (int z=1; z<[arrayOfRands count]; z++)
{
NSString *updateValue = arrayOfRands[z];
NSInteger newHiddenPosition = [self findBlank:leftSpaces];
NSDictionary *updateStuff = @{@"updateValue": updateValue, @"workingMasterDict":tDict, @"newPos":@(newHiddenPosition), @"newCGPto":@"left", @"@parent":colorV};
[self revealHidden:updateStuff];
}
}
我相信问题确实发生在revealHidden
调用动画的方法期间。
[leftSpaces replaceObjectAtIndex:[hardWayPos intValue] withObject:[NSString stringWithFormat:@"full"]];
CGPoint painPoint = [[leftPoints objectAtIndex:[hardWayPos intValue]] CGPointValue];
[UIView animateWithDuration:0.25 animations:^{
CGRect frame = hardWayView.frame;
frame.origin.x = painPoint.x;
frame.origin.y = painPoint.y;
hardWayView.frame = frame;
} completion:^(BOOL finished) {
//
}];
hardWayView.hidden=0;
hardWayView.backgroundColor = [UIColor blueColor];
hardWayLabel.textColor = [UIColor orangeColor];
我已经尝试制作frame.origin.x
和.y
实际数字(相对于变量),并且出现了相同的模式:UILabel 动画到正确的位置,UIView 从屏幕的左上角开始动画