0

很抱歉再次打扰您关于- (void)setNeedsDisplaywhich does not call - (void)drawRect:方法...但我在这个问题上花了很多时间

我是 Objective-C 的初学者,我正在尝试做一个简单的拍摄。(我知道我需要工作)

但是现在,我只想在视图中举起一张图片。例如,图片出现在视图的 (0,0) 处,我希望每次按下 NSButton 时都能使这张图片上升(10 像素)。

问题是图片不动;(你们中的一些人可以检查一下?这是代码:

#import <Cocoa/Cocoa.h>


@interface maVue : NSView {

    NSImageView * monMonstre;
    int nombre;
}
@property (readwrite) int nombre;

- (IBAction)boutonClic:(id)sender;

@end








#import "maVue.h"


@implementation maVue


- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
        nombre = 2;
        monMonstre = [[NSImageView alloc]init];
    }
    return self;
}


- (void)drawRect:(NSRect)dirtyRect 
{
    // Drawing code here.
    [monMonstre setFrame:CGRectMake(0,[self nombre],100,100)];
    [monMonstre setImage:[NSImage imageNamed:@"monstre.jpg"]];
    [self addSubview:monMonstre];
}


- (IBAction)boutonClic:(id)sender
{
    [self setNombre:[self nombre]+10];
    [self setNeedsDisplay:YES];

}


- (void)setNombre:(int)nouveauNombre
{
    nombre=nouveauNombre;
}

- (int)nombre
{
    return nombre;
}
@end
4

1 回答 1

0

不需要 - (void)setNeedsDisplay

只需对NSView属性使用标准frame

你应该重写你的代码:

#import <Cocoa/Cocoa.h>

@interface maVue : NSView
{
  NSImageView * monMonstre;
  int nombre;
}
@property (readwrite) int nombre;

- (IBAction)boutonClic:(id)sender;

@end


#import "maVue.h"

@implementation maVue

- (void)initWithFrame:(CGRect)frame
{
  if(self = [super initWithFrame:frame])
  {
    nombre = 2;
    monMonstre = [[NSImageView alloc] init];
    [monMonstre setImage:[NSImage imageNamed:@"monstre.jpg"]];
    NSSize mSize = [monMonstre image].size;
    NSRect monstreFrame;
    monstreFrame = NSMakeRect(0.0f, [self nombre], mSize.width, mSize.height);
    [monMonstre setFrame:monstreFrame];
    [self addSubview:monMonstre];
    [monMonstre release]; // <-- only if you don't use ARC (Automatic Reference Counting)
  }
  return self;
}

- (IBAction)boutonClic:(id)sender
{
  [self setNombre:[self nombre]+10];

  NSRect frame = [monMonstre frame];
  frame.origin.y = [self nombre];

  [monMonstre setFrame:frame]
}

- (void)setNombre:(int)nouveauNombre
{
  nombre=nouveauNombre;
}

- (int)nombre
{
  return nombre;
}

@end
于 2013-04-24T22:16:54.130 回答