Frage

Ich versuche, eine benutzerdefinierte Unterklasse von zu erstellen PDFView Klasse in XCode.Ich füge ein hinzu PDFView Instanz zu meinem Fenster in InterfaceBuiler hinzufügen und die folgenden Dateien für die Unterklasse erstellen:

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

Allerdings trotz der richtigen Einstellung und der anschließenden NSLog Anweisungen, die ausgelöst werden, wenn die PDFView Durch Klicken auf den Bereich wird bestätigt, dass die Größe des Objekts geändert werden sollte. Durch die Größenänderung des Fensters wird die Größe des Objekts nicht geändert PDFView.Kann mir jemand erklären, was ich tun muss, um das zu machen? PDFView Flächenskalierung mit der Größe des übergeordneten Fensters?

Den vollständigen Code für dieses Projekt, mit dem Sie es erstellen und ausführen können, finden Sie hier:

https://github.com/samuelmanzer/MyPDFViewer

War es hilfreich?

Lösung

Ich verstehe, dass Ihre Anforderung darin besteht, die Größe zu ändern PDFView wenn Sie die Größe des übergeordneten Fensters ändern.Es gibt zwei Möglichkeiten, dies zu erreichen

  1. Festlegen der automatischen Größenänderungsmaske
    • Obwohl Sie die Autorisierungsmaske programmatisch festgelegt haben, ist dies nicht effektiv, da Autolayout für Ihre Ansichten aktiviert wurde (wenn Sie standardmäßig Projekte auf XCode 5 erstellen, sind die XIB -Dateien standardmäßig für autolayout festgelegt).Deaktivieren Sie die Autolayout-Funktion, indem Sie das Kontrollkästchen „Autolayout verwenden“ auf der Registerkarte „Identität und Typ“ im Bereich „Dienstprogramme“ in Xcode für die Datei „MainMenu.xib“ deaktivieren.
    • Ändern Sie die MyPDFViews -(void)awakeFromNib durch Hinzufügen der Codezeile[self setFrame:[self superview].bounds];
  2. Verwenden von Autolayout durch Definieren von Layoutbeschränkungen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top