質問

XcodeでPDFViewクラスのカスタムサブクラスを作成しようとしています。InterfaceBuilerのウィンドウにPDFViewインスタンスを追加し、サブクラスの次のファイルを作成します。

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
.

しかし、オブジェクトがサイズ変更する必要があることを確認して、NSLog領域が変更されていることを確認するにもかかわらず、すべてのものを適切に設定し、その後のPDFViewステートメントをクリックします。PDFViewエリアスケールを親ウィンドウのサイズで設定するために何をする必要があるかを誰かに説明できますか?

このプロジェクトのフルコードを構築して実行することができるようになるのはここにあります:

https://github.com/samuelmanzer/mypdfviewer

役に立ちましたか?

解決

親ウィンドウのサイズを変更するときに、あなたの要件はPDFViewのサイズを変更することを理解しています。この

を達成する方法は2つあります

  1. 自動耐性マスクを設定します
    • 自動耐化マスクをプログラムで設定している場合でも、AutoLayoutがOne Viewsがオンになっているので効果的ではありません(Xcode 5でデフォルトでプロジェクトを作成すると、XIBファイルはデフォルトでオートライアウトに設定します。 )。 mainmenu.xibファイルのXcodeの「IDとType」タブの「autilayout」チェックボックスをオフにすることで、AutoLayout機能をオフにします。
    • Code[self setFrame:[self superview].bounds];
    • の行を追加することによって、MyPDFViewの - (void)awakefromnib を変更します。
  2. レイアウト制約を定義することで
  3. オートレイアウトを使用しています
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top