【发布时间】:2014-07-22 02:39:05
【问题描述】:
我有一个名为OneView 的NSView 子类,代码如下:
#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
第一次加载视图时,渐变按预期初始化,但我无法从IBAction 方法更改渐变。我已经使用支持图层的视图实现了这一点,但我正在尝试找到一种不依赖图层来实现向后兼容性的方法。
关于为什么IBAction 不改变渐变有什么想法吗?
【问题讨论】:
标签: objective-c cocoa nsview nscolor nsgradient