我在iTunes Song Title Scrolling in Cocoa
上看到了答案这是我写的代码:
// ScrollingTextView.h
#import <Cocoa/Cocoa.h>
@interface ScrollingTextView : NSView {
NSTimer *scroller;
NSPoint point;
NSString *text;
NSTimeInterval speed;
CGFloat stringWidth;
}
@property (nonatomic, copy) NSString *text;
@property (nonatomic) NSTimeInterval speed;
@end
// ScrollingTextView.m
#import "ScrollingTextView.h"
@implementation ScrollingTextView
@synthesize text;
@synthesize speed;
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)dealloc {
[scroller invalidate];
}
- (void)setText:(NSString *)newText {
text = [newText copy];
NSLog(@"t: %@", text);
point = NSZeroPoint;
stringWidth = [newText sizeWithAttributes:nil].width;
if (scroller == nil && speed > 0 && text != nil) {
scroller = [NSTimer scheduledTimerWithTimeInterval:speed target:self selector:@selector(moveText:) userInfo:nil repeats:YES];
}
}
- (void)setSpeed:(NSTimeInterval)newSpeed {
if (newSpeed != speed) {
speed = newSpeed;
NSLog(@"s: %f", speed);
[scroller invalidate];
if (speed > 0 && text != nil) {
scroller = [NSTimer scheduledTimerWithTimeInterval:speed target:self selector:@selector(moveText:) userInfo:nil repeats:YES];
}
}
}
- (void)moveText:(NSTimer *)timer {
point.x = point.x - 1.0f;
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
[super drawRect:dirtyRect];
if (point.x + stringWidth < 0) {
point.x += dirtyRect.size.width;
}
[text drawAtPoint:point withAttributes:nil];
if (point.x < 0) {
NSPoint otherPoint = point;
otherPoint.x += dirtyRect.size.width;
[text drawAtPoint:otherPoint withAttributes:nil];
}
}
@end
然后我将一个NSView拖到Interface Builder的主窗口中,并将其类更改为“ScrollingTextView”。 在控制器中我做:
ScrollingTextView *test = [[ScrollingTextView alloc] init];
[test setText:@"Test long text scrolling!"];
[test setSpeed:0.01];
但是当我跑步时没有任何事情发生,你能帮我一把吗?谢谢!
答案 0 :(得分:0)
ScrollingTextView *test = [[ScrollingTextView alloc] init];
这样做意味着您正在创建一个新的ScrollingTextView,而不是引用在.xib中创建和初始化的一个Interface Builder
在 viewcontroller 中将 ScrollingTextView 设置为 IBOutlet 。
(IBOutlet)ScrollingTextView *test;
从界面构建器中分配拖入其中的CustomView,作为视图控制器的引用插座。这就是 初始化 ScrollingTextView类的方法。
现在调用你的setTest:和setSpeed:它应该可以正常工作。