2017-01-30 3 views
0

Ich habe eine Animation, die programmgesteuert drei Schaltflächen auf dem Bildschirm nach oben bewegt. Allerdings, wenn ich es auf dem Simulator für iPhone 6 oder 4 teste die Position der Tasten sind alle falsch (aber sind nur richtig auf dem iPhone 5). Wie behebe ich das? Die Schaltflächen sind programmgesteuert aufgebaut, so dass ich das automatische Layout nicht wirklich verwenden kann, um sie auf dem Ansichtscontroller zu positionieren.So implementieren Sie automatisches Layout mit Schaltflächenanimationen

-(IBAction)Search:(id)sender { 

self.button.frame = CGRectMake(124, 475, 78, 72); 

self.buttonTwo.frame = CGRectMake(124, 475, 78, 76); 

self.buttonThree.frame = CGRectMake(124, 475, 78, 76); 

// animate 
[UIView animateWithDuration:0.75 animations:^{ 
    self.button.frame = CGRectMake(13, 403, 78, 72); 
    self.buttonTwo.frame = CGRectMake(124, 347, 78, 76); 
    self.buttonThree.frame = CGRectMake(232, 403, 78, 76); 
+0

Warum können Sie nicht automatisches Layout verwenden? Sie können sie immer noch positionieren, selbst wenn es programmgesteuert erstellt wurde kann eine Instanz von NSLayoutConstraints erstellen – Joshua

Antwort

0

Sie verwenden feste Werte für Rahmen, aber die Bildschirme haben unterschiedliche Breiten und/oder Höhen.

Wenn sie für iPhone 5-5s richtig sind (auch als iPhone 4" genannt), dann ein Weg, es zu handhaben ist:

-(IBAction)Search:(id)sender { 

CGFloat screenWidth = self.view.bounds.size.width; 
CGFloat screenHeight = self.view.bounds.size.height; 

CGFloat normalizedX = (124/320) // You calculate these 'normalized' numbers, possibly from a designer's spec. 
            // it's the percent the amount should be over, as number from 0-1. 
            // This number is based on screen width of 320 having x 124 pt. 

CGFloat startingX = normalizedX * screenWidth; 
CGFloat startingY = (475/588) * screenHeight; 
CGFloat width = (78/320) * screenWidth; 
CGFloat height = (72/588) * screenHeight; 

CGRect startingRect = CGRectMake(startingX, startingY, width, height) 

self.button.frame = startingRect; 
self.buttonTwo.frame = startingRect; 
self.buttonThree.frame = startingRect; 

// animate 
[UIView animateWithDuration:0.75 animations:^{ 
    CGFloat firstX = (13/320) * screenWidth; 
    CGFloat lowerY = (403/588) * screenHeight; 
    self.button.frame = CGRectMake(firstX, lowerY, width, height); 

    CGFloat secondX = (124/320) * screenWidth; 
    CGFloat upperY = (347/588) * screenHeight; 
    self.buttonTwo.frame = CGRectMake(secondX, upperY, width, height); 

    CGFloat thirdX = (233/320) * ScreenWidth; 
    self.buttonThree.frame = CGRectMake(thirdX, lowerY, width, height); 
}]; 
} 

Dies wird die Größe alles vergrößert und die relativen Positionen halten. Hinweis: UIButtons haben die gleiche Textgröße Sie können mit diesen Zahlen spielen, bis Sie den gewünschten Effekt erhalten Helfen Sie mit!

+0

Ich brauche das in Objective-C. Danke! – Elizabeth429

+0

Es ist der gleiche Code, nur geringfügige Syntax Chang es. Erledigt. –

Verwandte Themen