UITextView自动滚动的解决方案

思路:UIView加载完成3后,用NSTimer结合setContentOffset将UITextView向下滚动1像素。在滚动到底部的时候停止NSTimer。每当手动滚动UITextView前销毁NSTimer,滚动后重新创建NSTimer。

NSTimer *timer;
- (void)viewDidLoad {
	[self performSelector:@selector(resetText) withObject:nil afterDelay:3.0f];
}

- (void)resetText {	
	[timer invalidate];
	timer = nil;
	timer = [NSTimer scheduledTimerWithTimeInterval: 0.06
											 target: self
										   selector:@selector(onTick:)
										   userInfo: nil repeats:YES];
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
	[timer invalidate];
	timer = nil;
	NSLog(@"scrollViewWillBeginDragging");
	[self performSelector:@selector(resetText) withObject:nil afterDelay:3.0f];
}
- (void) onTick:(NSTimer*)theTimer {
	CGPoint pt = [textView contentOffset];
	CGFloat n = pt.y + 1;
	[textView setContentOffset:CGPointMake(pt.x, n)];	
	if (n> (textView.contentSize.height-textView.bounds.size.height)) {
		[theTimer invalidate];
		theTimer = nil;
		[timer invalidate];
		timer = nil;
	}
}

最后 不要忘了实现

UIScrollViewDelegate

 

posted @ 2010-10-14 16:40  王喆(nasa)  阅读(7099)  评论(3编辑  收藏  举报