Pergunta

Estou tentando criar uma subclasse personalizada do PDFView classe no XCode.Eu adiciono um PDFView instance para minha janela no InterfaceBuiler e crie os seguintes arquivos para a subclasse:

MeuPDFView.h:

#import <Quartz/Quartz.h>

@interface MyPDFView : PDFView

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

@end

MeuPDFView.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

No entanto, apesar de configurar tudo de forma adequada e o subsequente NSLog declarações que são acionadas quando o PDFView área é clicada confirmando que o objeto DEVE ser redimensionado, redimensionar a janela não redimensiona a PDFView.Alguém pode explicar o que preciso fazer para fazer o PDFView escala de área com o tamanho da janela pai?

O código completo deste projeto que permitirá construí-lo e executá-lo está aqui:

https://github.com/samuelmanzer/MyPDFViewer

Foi útil?

Solução

Entendo que sua necessidade é redimensionar o PDFView conforme você redimensiona a janela pai.Existem duas maneiras de conseguir isso

  1. Configurando a máscara de redimensionamento automático
    • Mesmo que você tenha definido programaticamente a máscara automática, isso não é eficaz, pois o AutoLayout foi ativado para suas visualizações (quando você cria projetos por padrão no Xcode 5, os arquivos XIB são, por padrão, definido para automaticamente).Desative o recurso Autolayout desmarcando a caixa de seleção “Usar Autolayout” na guia “Identidade e tipo” no painel Utilitários no Xcode para o arquivo MainMenu.xib.
    • Modifique o MyPDFView -(void)wakeFromNib adicionando a linha de código[self setFrame:[self superview].bounds];
  2. Usando o Autolayout definindo restrições de layout
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top