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