我有一個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從屏幕中心向左側動畫的情況下才會這樣做)?
我確實啓用了Autolayout,但我不認爲這是罪魁禍首。當我在iOS 7的iPhone模擬器上運行應用程序時,會發生此問題,並且我無法使模擬器運行於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。 Autolayout關閉時也會發生同樣的動作。 – zch
首先,您正在修改框架,然後開始動畫。 – Exploring