图片不移动(-setNeedsDisplay:YES不调用drawRect :)

时间:2013-04-24 22:01:58

标签: macos image drawrect setneedsdisplay

很抱歉再次打扰你没有打电话的- (void)setNeedsDisplay - (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

1 个答案:

答案 0 :(得分: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