는 나는 다음과 같은 코드로 OneView
이름 NSView
서브 클래스가 있습니다에서변경 NSGradient 색상과 10.8
#import "OneView.h"
@interface OneView()
@property (strong, nonatomic) NSGradient *gradient;
@end
@implementation OneView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSColor *top = [NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:1.0];
NSColor *btm = [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:1.0];
self.gradient = [[NSGradient alloc] initWithStartingColor:top endingColor:btm];
[self.gradient drawInRect:self.bounds angle:270];
}
# pragma mark - Public
- (void)changeGradient {
self.gradient = nil;
NSColor *top = [NSColor colorWithCalibratedRed:0.0 green:1.0 blue:0.0 alpha:1.0];
NSColor *btm = [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:1.0];
self.gradient = [[NSGradient alloc] initWithStartingColor:top endingColor:btm];
[self.gradient drawInRect:self.bounds angle:270];
[self setNeedsDisplay:YES];
}
@end
을 내 AppDelegate
(또는 다른 클래스를 수), 나는의 색상을 변경하려고 OneView
클래스의 changeGradient
메서드를 호출하여 그라데이션 :
#import "AppDelegate.h"
#import "OneView.h"
@interface AppDelegate()
@property (weak, nonatomic) IBOutlet OneView *oneView;
@end
@implementation AppDelegate
- (IBAction)changeGradient:(id)sender {
[self.oneView changeGradient];
}
@end
뷰가 처음 예상대로 그라데이션 초기화하지만 난 gradie를 변경할 수 없습니다입니다로드 nt는 IBAction
입니다. 레이어 기반 뷰를 사용하여이 작업을 수행했지만 이전 버전과의 호환성을 위해 레이어를 사용하지 않는 방법을 찾으려고합니다.
왜 IBAction
이 그라데이션을 변경하지 않는지에 대한 의견이 있으십니까?
몇 가지 예제 코드로 자세히 설명하십시오. 특히 KVO 사용에. – wigging