Ich habe eine UILabel, hardWayLabel
, innerhalb einer UIView, hardWayView
. Ich brauche diese Ansicht (und folglich das Etikett), um zu einer neuen Position auf der äußersten linken Seite des Bildschirms zu animieren. Während sich das Etikett jedoch an der richtigen Position befindet, bewegt sich die Ansicht weiterhin weit von der linken Seite des Bildschirms weg. Ich verwende den folgenden Code für die Animation (die ich viele andere Male in meinem app erfolgreich):Warum animiert mein UIView zur falschen Position?
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];
Ich habe NSLog verwendet, um sicherzustellen, dass painPoint.x und painPoint.y sind, was sie sein sollten 9which ist bestätigt durch die Tatsache, dass das UILabel in der richtigen Position endet. Ich denke, die eigentliche Frage ist, warum sich die UIView weiterhin über die Bildschirmgrenzen hinaus bewegt (und nur dann, wenn die UIView von der Mitte des Bildschirms aus nach links animiert wird).
Ich habe Autolayout aktiviert, obwohl ich nicht denke, dass dies der Schuldige ist. Dieses Problem tritt auf, wenn ich die App auf dem iPhone Simulator mit iOS 7 ausführe, und ich kann den Simulator nicht mit iOS 6 laufen lassen. Daher kann ich das Problem nicht auf iOS 7 isolieren (obwohl könnte es sein? eine alte Version von Xcode und die App verwendet keine Storyboards).
Hier ist eine Bildschirmaufnahme des Problems. Wie Sie sehen, funktioniert das Verschieben der beiden Ansichten von links nach rechts normal. Wenn Sie die Ansichten jedoch nach links verschieben, scheint eine der Ansichten (der schwarze Hintergrund) über die linke obere Ecke des Bildschirms hinauszugehen, während die Beschriftung (in orangefarbenem Text) an die richtige Stelle verschoben wird. Explanatory video
Update: Hier ist ein bisschen mehr Code. Es ist fast identisch mit anderen Teilen meiner Anwendung, die einwandfrei funktionieren, was ein bisschen wie ein Gehirn-Blaster ist.
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];
}
}
Ich glaube, das Problem wirklich während des revealHidden
Verfahren geschieht, wo die Animation genannt wird.
[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];
habe ich versucht, machen frame.origin.x
und .y
tatsächlichen Zahlen (im Vergleich zu Variablen) und das gleiche Muster folgt: die UILabel animiert an die richtige Stelle und die UIView animiert von der oberen linken Ecke des Bildschirms off
Schalten Sie das automatische Layout aus und testen Sie es. Es ist wahrscheinlich der Schuldige. – Joel
@Joel leider nicht. Die gleiche Bewegung tritt auf, wenn das automatische Layout deaktiviert ist. – zch
Zuerst ändern Sie den Rahmen und dann starten Sie die Animation. – Exploring