سؤال

أحاول إنشاء فئة فرعية مخصصة من PDFView فئة في كسكودي.أود أن أضيف PDFView المثال إلى نافذتي في إنتيرفاسيبويلر وإنشاء الملفات التالية للفئة الفرعية:

ميبدففيو.h:

#import <Quartz/Quartz.h>

@interface MyPDFView : PDFView

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

@end

ميبدففيو.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.يمكن لأي شخص أن يفسر ما أحتاج إلى القيام به لجعل PDFView مقياس المساحة مع حجم النافذة الأم?

رمز كامل لهذا المشروع من شأنها أن تسمح لك لبناء وتشغيله هو هنا:

https://github.com/samuelmanzer/MyPDFViewer

هل كانت مفيدة؟

المحلول

أنا أفهم أن الشرط الخاص بك هو تغيير حجم PDFView كما يمكنك تغيير حجم الإطار الأصل.هناك طريقتان لتحقيق ذلك

  1. ضبط قناع الحجم التلقائي
    • على الرغم من أنك قمت بتعيين قناع أوتوريزينغ بشكل منهجي ، وهذا ليس فعالا كما تم تشغيل أوتولايوت على وجهات النظر الخاصة بك (عند إنشاء مشاريع افتراضيا على كسكودي 5 ، يتم تعيين ملفات زيب افتراضيا ل أوتولايوت ).قم بإيقاف تشغيل ميزة التخطيط التلقائي عن طريق إلغاء تحديد مربع الاختيار "استخدام التخطيط التلقائي" في علامة التبويب "الهوية والنوع" في جزء الأدوات المساعدة في كسكودي للقائمة الرئيسية.ملف زيب.
    • تعديل ميبدففيو - (باطل)أيقظمنيب عن طريق إضافة سطر التعليمات البرمجية[self setFrame:[self superview].bounds];
  2. استخدام التخطيط التلقائي عن طريق تحديد قيود التخطيط
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top