Domanda

Sto tentando di creare una sottoclasse personalizzata della classe PDFView in XCode.Aggiungo un'istanza PDFView alla mia finestra in InterfaceBuiler e crea i seguenti file per la sottCLASSA:

mypdfview.h:

#import <Quartz/Quartz.h>

@interface MyPDFView : PDFView

-(void)awakeFromNib;
-(void)mouseDown:(NSEvent *)theEvent;

@end
.

mypdfview.m:

#import "MyPDFView.h"

@implementation MyPDFView

-(void)awakeFromNib
{
    [self setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable|NSViewMinXMargin|NSViewMaxXMargin|NSViewMinYMargin|NSViewMaxYMargin];
    [self setAutoScales:YES];
}

- (void)mouseDown:(NSEvent *)theEvent
{
    unsigned long mask = [self autoresizingMask];
    NSLog(@"self autoresizingMask: %lu",mask);
    NSLog(@"NSViewHeightSizable: %lu",mask & NSViewHeightSizable);
    NSLog(@"NSViewWidthSizable: %lu",mask & NSViewWidthSizable);
    NSLog(@"self setAutoScales: %@",[self autoScales] ? @"YES" : @"NO");
    NSView* sv = [self superview];
    NSLog(@"superview autoresizesSubviews: %@",[sv autoresizesSubviews] ? @"YES" : @"NO");
    NSSize frame_dims = [self frame].size;
    NSLog(@"Frame: (%f,%f)",frame_dims.width,frame_dims.height);
    NSSize bounds_dims = [self bounds].size;
    NSLog(@"Bounds: (%f,%f)",bounds_dims.width,bounds_dims.height);
    NSSize sv_frame_dims = [sv frame].size;
    NSLog(@"Superview Frame: (%f,%f)",sv_frame_dims.width,sv_frame_dims.height);
    NSSize sv_bounds_dims = [sv bounds].size;
    NSLog(@"Superview Bounds: (%f,%f)",sv_bounds_dims.width,sv_bounds_dims.height);
    [super mouseDown:theEvent];
}
@end
.

Tuttavia, nonostante l'impostazione di tutto ciò che è in modo appropriato e le successive istruzioni NSLog che attivano quando si fa clic sull'area PDFView confermando che l'oggetto deve ridimensionare, il ridimensionamento della finestra non ridimensiona il PDFView.Qualcuno può spiegare cosa devo fare per rendere la scala dell'area PDFView con le dimensioni della finestra genitore?

Il codice completo per questo progetto che ti permetterà di costruire ed eseguire è qui:

https://github.com/samuelmanzer/mypdfviewer

È stato utile?

Soluzione

Capisco che il tuo requisito è quello di ridimensionare il PDFView mentre ridimensiona la finestra genitore. Ci sono due modi per raggiungere questo

    .
  1. Impostazione della maschera di esecuzione
      .
    • Anche se hai programmaticamente impostare la maschera di autoresizing, questo non è efficace come è stato attivato Autolayout per le viste (quando crei progetti per impostazione predefinita su Xcode 5, i file XIB sono predefiniti per Autolayout ). Disattiva la funzione AutoLayout deselezionando la casella di controllo "Usa AutoLayout" nella scheda "Identità e Tipo" nel riquadro Utilities in XCode per il file mainmenu.xib.
    • Modifica il MyPDFView> - (Void) AwakeFromnib aggiungendo la linea di code[self setFrame:[self superview].bounds];
  2. Utilizzo dell'autolayout definendo i vincoli del layout
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top