У меня есть UILabel, hardWayLabel
, внутри UIView, hardWayView
. Мне нужно это представление (и, следовательно, ярлык), чтобы оживить новую позицию в левой части экрана. Однако, пока метка идет в правильное положение, вид можно видеть, продолжая двигаться далеко от левой стороны экрана. Я использую следующий код для анимации (который я использую еще много раз в моем приложении успешно):Почему мой UIView анимируется в неправильном положении?
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 то, что они должны быть 9which является подтверждается тем фактом, что UILabel попадает в правильное положение. Я предполагаю, что реальный вопрос заключается в том, почему UIView будет продолжать двигаться мимо границ экрана (и только в этом случае, когда UIView анимируется из центра экрана влево)?
У меня есть автозапуск включен, хотя я не думаю, что это преступник. Эта проблема возникает, когда я запускаю приложение на iPhone Simulator с iOS 7, и я не могу заставить симулятор работать с iOS 6, поэтому я не могу изолировать проблему до iOS 7 (хотя может быть?) Я начал разработку в старая версия Xcode и приложение не используют раскадровки).
Вот экранная запись проблемы. Как вы можете видеть, перемещение двух изображений слева направо работает нормально. Хотя при перемещении взглядов влево один из видов (черный фон), кажется, выходит из экрана в верхнем левом углу, в то время как метка (в оранжевом тексте) переходит в правильное место). Explanatory video
Обновление: вот еще код. Он почти идентичен другим частям моего приложения, которые работают безупречно, что немного бластер мозга.
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 одушевляет от от верхнего левого угла экрана
Отключите автоспуск и проверьте его. Вероятно, это преступник. – Joel
@Joel alas no. То же самое происходит при отключении автовыключения. – zch
Сначала вы изменяете рамку, а затем запускаете анимацию. – Exploring