puedo por ingles idioma home flotante español desactivar control como cambiar boton activar iphone uiview

iphone - por - itunes



¿Una manera simple de cambiar la posición de UIView? (12)

@TomSwift Swift 3 respuesta

aView.center = CGPoint(x: 150, y: 150); // set center

O

aView.frame = CGRect(x: 100, y: 200, width: aView.frame.size.width, height: aView.frame.size.height ); // set new position exactly

O

aView.frame = aView.frame.offsetBy(dx: CGFloat(10), dy: CGFloat(10)) // offset by an amount

Cambio la posición de una UIView con los siguientes códigos sin cambiar el tamaño de la vista.

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

¿Hay una manera más simple de cambiar solo la posición de vista?


Aquí está la respuesta de Swift 3 para cualquiera que busque, ya que Swift 3 no acepta "Hacer".

aView.center = CGPoint(x: 200, Y: 200)


En mi trabajo no usamos macros. Entonces la solución proporcionada por @TomSwift me inspiró. Veo la implementación de CGRectMake y creo el mismo CGRectSetPos pero sin macros.

CG_INLINE CGRect CGRectSetPos(CGRect frame, CGFloat x, CGFloat y) { CGRect rect; rect.origin.x = x; rect.origin.y = y; rect.size.width = frame.size.width; rect.size.height = frame.size.height; return rect; }

Para usar, solo pongo marco, X e Y

viewcontroller.view.frame = CGRectSetPos(viewcontroller.view.frame, 100, 100);

Trabaja para mí ^ _ ^


Encontré un enfoque similar (también usa una categoría) con la respuesta de gcamp que me ayudó mucho here . En tu caso es tan simple como esto:

aView.topLeft = CGPointMake(100, 200);

pero si quiere, por ejemplo, centrar horizontalmente y hacia la izquierda con otra vista, puede simplemente:

aView.topLeft = anotherView.middleLeft;


La solución en la respuesta seleccionada no funciona en caso de utilizar Autolayout. Si está utilizando el diseño automático para las vistas, eche un vistazo a esta answer .


Otra manera:

CGPoint position = CGPointMake(100,30); [self setFrame:(CGRect){ .origin = position, .size = self.frame.size }];

Esto ahorro parámetros de tamaño y cambio de origen solamente.


Si alguien necesita una extensión ligera de Swift para cambiar los márgenes de UIView fácilmente, puede usar github.com/katleta3000/UIView-Frame

view.top = 16 view.right = self.width view.bottom = self.height self.height = view.bottom


UIView también tiene una propiedad en el center . Si solo desea mover la posición en lugar de cambiar el tamaño, simplemente puede cambiar eso, por ejemplo:

aView.center = CGPointMake(50, 200);

De lo contrario, lo harías de la forma en que publicaste.


Yo tuve el mismo problema. Hice una categoría simple de UIView que corrige eso.

.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

.metro

#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



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

o

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

o

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

Editar:

No compilé esto todavía, pero debería funcionar:

#define CGRectSetPos( r, x, y ) CGRectMake( x, y, r.size.width, r.size.height ) aView.frame = CGRectSetPos( aView.frame, 100, 200 );


aView.frame = CGRectMake(100, 200, aView.frame.size.width, aView.frame.size.height);