Ya que la plantilla de un OS X aplicación en Xcode parece ser similar a un vacío de plantilla de aplicación, las siguientes se utilizan para agregar una vista y un botón (tratando de no usar el Interface builder, por ahora):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{       
    NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];

    view.layer.backgroundColor = [[NSColor yellowColor] CGColor];

    [self.window.contentView addSubview:view];

    NSRect frame = NSMakeRect(10, 40, 90, 40);
    NSButton* pushButton = [[NSButton alloc] initWithFrame: frame]; 
    pushButton.bezelStyle = NSRoundedBezelStyle;

    [self.window.contentView addSubview:pushButton];

    NSLog(@"subviews are %@", [self.window.contentView subviews]);   
}

Código Similar en iOS, se debe haber producido un cuadro de color amarillo y un botón, pero el código anterior produce solamente un botón, pero la vista no se mostrará. Hay algo mal con el código anterior, y cómo hacer que se muestre la vista con un fondo amarillo?

OriginalEl autor Jeremy L | 2012-09-11

3 Comentarios

  1. 18

    Uso setWantsLayer: método de NSView clase.

    NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
    [view setWantsLayer:YES];
    view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
    
    [self.window.contentView addSubview:view];
    
    NSRect frame = NSMakeRect(10, 40, 90, 40);
    NSButton* pushButton = [[NSButton alloc] initWithFrame: frame]; 
    pushButton.bezelStyle = NSRoundedBezelStyle;
    
    [self.window.contentView addSubview:pushButton];
    
    NSLog(@"subviews are %@", [self.window.contentView subviews]);  
    NSView no tiene una propiedad backgroundColor, parece. Yo especie de miss UIKit…!
    Esta respuesta es mala. Usted dijo explícitamente de no tocar el respaldo de la capa en una capa de la copia de ver (a ver cuando se utiliza -setWantsLayer: sin llamar -setLayer: primera). A partir de la documentación: Cuando se utiliza la capa de la copia de puntos de vista que usted nunca debe interactuar directamente con la capa
    que quieres decir, primero debe crear una instancia de un CALayer, establece a la vista.capa y, a continuación, establezca wantsLayer para SÍ, y el color de fondo?
    No, porque una capa de hosting ver (que es lo que se obtiene si se establece la capa) no tiene ninguna subvistas. Si usted quiere que su botón en la parte superior del fondo, que tiene que ser una subvista (la superposición de puntos de vista que no son jerárquica no puede funcionar correctamente, y casi seguro que no, si uno es capa-de hosting). Desde su botón tendría que ser una subvista, el amarillo de fondo no puede ser una capa de hosting ver.
    ¿Cómo vincular una clase personalizada para que ver ? @NSAddict

    OriginalEl autor Parag Bafna

  2. 5

    NSViews en el Cacao son, por defecto, no de la capa de copia de seguridad. Sospecho que si el tipo de

    NSLog(@"%@", view.layer);

    usted verá que es nil.

    En iOS, todas las opiniones tienen capas. Pero en OS X, las vistas no tienen capas. Además, hay 2 «modos» de la capa-copia de vistas en OS X. Hay lo que se llama una «capa-copia de opiniones» y una «capa de hosting ver». Una capa respaldados utiliza un CoreAnimation capa de caché dibujado de datos, pero no se les permite interactuar con la capa de ninguna manera. Una capa de hosting utiliza un CALayer que proporcionan explícitamente, y usted puede meterse con la capa que todo lo que quieras. Sin embargo, con una capa de hosting ver que no puede agregar cualquier subvistas, o utilizar el built-in NSView dibujo mecanismo. Una capa de hosting ver sólo debe ser utilizado como la raíz de un CoreAnimation jerarquía de capas.

    Teniendo en cuenta todo esto, usted probablemente debería evitar el uso de CoreAnimation a todos por su opinión.

    Es posible que un NSBox hace lo que usted desea. Sin duda se puede establecer un color de relleno allí, desactivar la frontera, y ajuste el estilo personalizado. No estoy 100% seguro de que va a dibujar como un simple rectángulo lleno de color. Alternativamente, usted puede definir sus propios NSView subclase que atrae a un color en -drawRect:.

    ¿sabes cómo hacer que la vista se muestran con un fondo amarillo?
    Estoy investigando ahora mismo. Principalmente hago iOS, así que por favor mantenga en.
    Yo siempre hago como Kevin se mencionó, el uso de un NSBox en lugar de una vista personalizada. Acaba de establecer su tipo de costumbre, y entonces usted puede (en IB o código) establece su color de fondo, un color de borde (o ninguna frontera, si usted elige), y la vuelta a la esquina, si lo desea.
    He intentado un NSBox, pero tiene un «título» con ella, y no hay ninguna propiedad backgroundColor
    Usted puede nulo el título, establecer el tipo de caja a la medida», establece el tipo de borde a ninguno. El color de fondo es controlado por el fillColor. Me animo a crear un xib, arrastre un NSBox en su lienzo, y jugar con los atributos de allí.

    OriginalEl autor Lily Ballard

  3. 5

    Para ampliar la sugerencia por Kevin Ballard, la manera clásica de hacer esto es subclase NSView y anular el -drawRect: método. NSRectFill es una función muy conveniente para el llenado de un rectángulo sin tener que crear una curva de la ruta:

    - (void)drawRect:(NSRect)rect
    {
        [[NSColor yellowColor] set];
        NSRectFill(rect);
    }

    OriginalEl autor Martin Winter

Dejar respuesta

Please enter your comment!
Please enter your name here