72 votes

Un moyen simple de changer la position d’UIView?

Je change la position d'un UIView avec les codes suivants sans changer la taille de la vue.

 CGRect f = aView.frame;
f.origin.x = 100; // new x
f.origin.y = 200; // new y
aView.frame = f;
 

Existe-t-il un moyen plus simple de ne modifier que la position d'affichage?

231voto

TomSwift Points 22012
 aView.center = CGPointMake(150, 150); // set center
 

ou

 aView.frame = CGRectMake( 100, 200, aView.frame.size.width, aView.frame.size.height ); // set new position exactly
 

ou

 aView.frame = CGRectOffset( aView.frame, 10, 10 ); // offset by an amount
 

Modifier:

Je ne l'ai pas encore compilé, mais ça devrait marcher:

 #define CGRectSetPos( r, x, y ) CGRectMake( x, y, r.size.width, r.size.height )

aView.frame = CGRectSetPos( aView.frame, 100, 200 );
 

33voto

gcamp Points 9804

J'ai eu le même problème. J'ai créé une catégorie UIView simple qui corrige cela.

.h

 #import <UIKit/UIKit.h>


@interface UIView (GCLibrary)

@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;

@end
 

.m

 #import "UIView+GCLibrary.h"


@implementation UIView (GCLibrary)

- (CGFloat) height {
    return self.frame.size.height;
}

- (CGFloat) width {
    return self.frame.size.width;
}

- (CGFloat) x {
    return self.frame.origin.x;
}

- (CGFloat) y {
    return self.frame.origin.y;
}

- (CGFloat) centerY {
    return self.center.y;
}

- (CGFloat) centerX {
    return self.center.x;
}

- (void) setHeight:(CGFloat) newHeight {
    CGRect frame = self.frame;
    frame.size.height = newHeight;
    self.frame = frame;
}

- (void) setWidth:(CGFloat) newWidth {
    CGRect frame = self.frame;
    frame.size.width = newWidth;
    self.frame = frame;
}

- (void) setX:(CGFloat) newX {
    CGRect frame = self.frame;
    frame.origin.x = newX;
    self.frame = frame;
}

- (void) setY:(CGFloat) newY {
    CGRect frame = self.frame;
    frame.origin.y = newY;
    self.frame = frame;
}

@end
 

13voto

lxt Points 22990

UIView ont également un center de la propriété. Si vous voulez juste à se déplacer de la position plutôt que de les redimensionner, vous pouvez simplement changer que - par exemple:

aView.center = CGPointMake(50, 200);

Sinon, vous devez le faire de la manière que vous avez posté.

7voto

Meda Points 630

J'ai trouvé une approche similaire (il utilise une catégorie) avec gcamp de la réponse qui m'a beaucoup aidé ici. Dans votre cas est aussi simple que cela:

aView.topLeft = CGPointMake(100, 200);

mais si vous voulez par exemple, centre horizontal et vers la gauche avec un autre point de vue, vous pouvez tout simplement:

aView.topLeft = anotherView.middleLeft;

4voto

Mark Adams Points 17189
aView.frame = CGRectMake(100, 200, aView.frame.size.width, aView.frame.size.height);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X