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が本来あるべきものであることを確認しました。これは、UILabelが最終的に正しい位置にあるという事実によって確認されます。本当の問題は、UIView が画面の境界を越えて移動し続ける理由だと思います (この例では、UIView が画面の中央から左にアニメーション化されている場合にのみそうします)。
私は Autolayout を有効にしていますが、これが原因だとは思いません。この問題は、iOS 7 を搭載した iPhone シミュレーターでアプリを実行したときに発生し、シミュレーターを iOS 6 で実行することができないため、問題を iOS 7 に切り分けることができません (ただし、可能性はありますか?私は古いバージョンの Xcode であり、アプリはストーリーボードを使用しません)。
これが問題の画面記録です。ご覧のとおり、2 つのビューを左から右に移動すると正常に動作します。ただし、ビューを左に戻すと、ビューの 1 つ (黒い背景) が左上隅を通って画面から外れるように見えますが、ラベル (オレンジ色のテキスト) は正しい場所に移動します)。解説動画
更新: ここにいくつかのコードがあります。これは、問題なく動作する私のアプリケーションの他の部分とほぼ同じです。これはちょっとした頭の体操です。
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は画面の左上隅からアニメーション化します