2013-04-24 2 views
0

жаль снова беспокоить вас о - (void)setNeedsDisplay, которые не называют - (void)drawRect: метод ... но я провожу так много времени на эту проблемукартинка не двигается (-setNeedsDisplay: ДА не вызывает DrawRect :)

I Я новичок в Objective-C, и я пытаюсь сделать простую съемку. (Я знаю, что мне нужно работать)

Но сейчас я просто хочу поднять картинку на вид. Например, изображение появляется в (0,0) представления, и я хотел бы, чтобы это изображение увеличивалось (в 10 пикселей) каждый раз, когда я нажимаю кнопку NSButton.

Проблема картина не двигается; ( Некоторые из вас могут проверить это Вот код:

#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

Вы НЕ НУЖНО- (void)setNeedsDisplay

Просто! Стандарт на NSViewframe.

Вы должны переписать свой код так, чтобы :

#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 
+0

благодарит за быстрый ответ Денис Пашков! и рекомендуется использовать -frame. но изображение больше не появляется, потому что вы удаляете метод -drawRect ... Если я добавляю метод -drawRect, изображение появляется, но все равно не перемещается, когда я нажимаю на NSButton ... –

+0

, и если я попытаюсь поставить [self addSubview: monMonstre] внутри метода -boutonClic, изображение не будет отображаться .. –

+0

Вы должны добавить свой «monMonstre» только один раз, когда вы его запустите. Если вы хотите, чтобы его показывали, вы должны установить для него изображение) –

Смежные вопросы