UIViewの内部にhardWayLabel
のUILabelがあります。hardWayView
です。このビュー(およびその結果としてのラベル)は、画面の左端の新しい位置にアニメートする必要があります。ただし、ラベルが正しい位置に移動している間は、画面の左側から遠くに移動し続けていることがわかります。私はpainPoint.xとpainPoint.yは、彼らが9whichがどうあるべきかであることを確認するためのNSLogを使用しているなぜ私の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];
:私は(私が正常に私のアプリでは、他の多くの時間を使用)、アニメーションのための次のコードを使用しますUILabelが正しい位置に終わるという事実によって確認されます。私は実際の質問は、なぜUIViewは、画面の境界を越えて移動し続けるだろうと思います(UIViewが画面の中央から左にアニメーション化されている場合にのみこの例でそうします)。
私はAutolayoutを有効にしていますが、これは原因ではないと思います。この問題は、iPhone SimulatorでiOS 7でアプリケーションを実行したときに発生し、シミュレータをiOS 6で動作させることができないため、iOS 7に問題を切り分けることができませんでした。古いバージョンのXcodeとアプリはストーリーボードを使用していません)。
ここに問題の画面が表示されます。ご覧のとおり、2つのビューを左から右に動かすと正常に動作します。ビューを左に動かすと、ビュー(黒い背景)の1つが画面の左上隅に表示され、ラベル(オレンジ色のテキスト)は正しい場所に表示されます。 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];
Iは、(変数に対して)frame.origin.x
と.y
実際の数字を作る試みたと同じパターンが行なわれる:UILabelが正しい場所にアニメーションとのUIViewは、画面の左上隅からオフアニメーション
自動レイアウトをオフにしてテストします。それはおそらく原因です。 – Joel
@Joel alas no。 Autolayoutをオフにしても同じ動きが起こります。 – zch
まず、フレームを変更してからアニメーションを開始します。 – Exploring