Бесконечный Textview с автопрокруткой в IOS
Автопрокрутка в textview реализована. Но я не могу реализовать бесконечное текстовое представление. Я хочу добавить один и тот же текст в текстовое представление и бесконечно прокручивать.....
Код для бесконечной прокрутки.......
-(void)viewWillAppear:(BOOL)animated{
if (scrollingTimer == nil) {
scrollingTimer = [NSTimer scheduledTimerWithTimeInterval:(0.06)
target:self
selector:@selector(autoscrollTimerFired)
userInfo:nil
repeats:YES];
}
self.textView.contentOffset=CGPointMake(0, -(self.textView.frame.size.height));
}
- (void) autoscrollTimerFired{
CGPoint scrollPoint = self.textView.contentOffset;
scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
[self.textView setContentOffset:scrollPoint animated:NO];
}
1 ответ
Решение
Вы можете смоделировать это, прокрутив обратно к началу UITextView
после того, как ваша первоначальная высота основного текста была достигнута.
Вот пример, который "бесконечно" прокручивает случайный абзац Лорема.
Он дублирует абзац три раза, чтобы он выглядел как прокрутка навсегда.
@implementation ViewController
{
UITextView *infiniteTextView;
NSTimer *scrollTimer;
CGFloat textHeight;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor darkGrayColor];
// Create a text view
infiniteTextView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 0, self.view.bounds.size.height/4)];
NSString *lorem = @"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\n\n";
infiniteTextView.font = [UIFont systemFontOfSize:15];
CGRect textBounds = [lorem boundingRectWithSize:CGSizeMake(infiniteTextView.bounds.size.width - 16.0f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName : infiniteTextView.font } context:nil];
textHeight = textBounds.size.height;
//Duplicate the paragraph 3 times
infiniteTextView.text = [lorem stringByAppendingString:[lorem stringByAppendingString:lorem]];
[self.view addSubview:infiniteTextView];
}
- (void) viewDidAppear:(BOOL)animated
{
if (scrollTimer == nil)
{
scrollTimer = [NSTimer scheduledTimerWithTimeInterval:(0.06)
target:self
selector:@selector(autoscrollTimerFired:)
userInfo:nil
repeats:YES];
}
}
- (void) autoscrollTimerFired:(id)sender
{
CGPoint scrollPoint = infiniteTextView.contentOffset;
//Reset the scroll position if we exceed
// the body paragraph height
if( scrollPoint.y > textHeight )
{
scrollPoint.y = 0;
}
scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
[infiniteTextView setContentOffset:scrollPoint animated:NO];
}
@end
(Попробуйте это на iPhone Retina 4-дюймовом объективе, возможно, потребуется некоторая настройка для iPad.)