iOS UIScrollView в UIView - PullRequest
       7

iOS UIScrollView в UIView

3 голосов
/ 13 апреля 2011

У меня есть немного конкретный вопрос.Это может не иметь значения для большинства людей, но мне пришлось иметь дело с этим, и я должен был решить проблему, описанную ниже.Я попытался найти некоторую информацию об этом, используя Google и документацию Apple SDK, но безуспешно.

Я проектировал экран, на котором было много изображений в горизонтальных прокрутках.Там три три одинаковых свитка.У каждого свитка был заголовок.Я реализовал пользовательский класс, полученный из UIView и поместил туда UIScrollView для прокрутки и UILabel для текста заголовка:

@interface MyView : UIView {
    UIScrollView *iScrollView;
    UIView       *iTitleView;
}

Затем я поместил объекты этого класса в представление UIViewController:

@implementation MyViewController

- (void) viewDidLoad {
    [super viewDidLoad];
    ...
    iScrollViewTop = [[MyView alloc] init];
    [self.view addSubview:iScrollViewTop];
    ...
}

@end

Когда я заполнил внутренний вид прокрутки изображениями и запустил свое приложение, оно выглядело нормально.Но было странное поведение.Во-первых, у прокрутки не было отскоков, как будто я установил

iScrollView.bounces = NO;

, а во-вторых, когда я прокрутил прокрутку, после того, как прокрутка остановилась, полоса прокрутки не исчезла в течение одной секунды.Это было странно для меня, потому что, когда я обычно создаю UIScrollView и добавляю его к представлению UIViewController, у него есть отскоки, и полоса прокрутки исчезает сразу после ее остановки.Я пытался изменить свойства UIScrollView, такие как directionalLockEnabled, pagingEnabled, canCancelContentTouches, delaysContentTouches, decelerationRate и другие.На самом деле я попытался изменить почти все свойства UIScrollView, но не смог заставить полосы прокрутки сразу исчезнуть.

Если я попытаюсь добавить UIScrollView вместо MyView к UIViewController.view, она подпрыгивает и полоса прокрутки исчезает сразу после ее остановки.Также я получаю правильное поведение, если я подкласс MyView из UIScrollView, но в этом случае я не могу управлять заголовком заголовка, потому что он прокручивается вместе с другим контентом.

Итак, вот мои вопросы:

  1. Знаете ли вы, почему я вижу это поведение?
  2. Как я могу получить "обычное" поведение для прокрутки, инкапсулированной UIView?

1 Ответ

1 голос
/ 23 апреля 2011

хорошо, хакерский код следует, поэтому игнорируйте все мои другие проблемы, но следуйте этому шаблону (westie.jpg = изображение размером 360x200)

@interface MyView : UIView
{
UIScrollView *sv;
UILabel *l;
}
-(MyView*)initWithFrame:(CGRect)frame;
@end

@implementation MyView
-(MyView*)initWithFrame:(CGRect)frame;
{
self = [super initWithFrame:frame];
sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,360,200)];
sv.scrollEnabled = YES;
sv.contentSize = CGSizeMake(360*3,200);
[self addSubview:sv];

UIImage *i1 = [UIImage imageNamed:@"westie.jpg"];
UIImageView *iv1 = [[UIImageView alloc] initWithImage:i1];
iv1.frame = CGRectMake(360*0, 0, 360, 200);
[sv addSubview:iv1];
UIImageView *iv2 = [[UIImageView alloc] initWithImage:i1];
iv2.frame = CGRectMake(360*1, 0, 360, 200);
[sv addSubview:iv2];
UIImageView *iv3 = [[UIImageView alloc] initWithImage:i1];
iv3.frame = CGRectMake(360*2, 0, 360, 200);
[sv addSubview:iv3];

l = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
l.text = @"Hello World";
l.backgroundColor = [UIColor blueColor];
[self addSubview:l];

return self;
}

@ end

позже, всоздание вашего внешнего вида:

[window addSubview:[[MyView alloc] initWithFrame:CGRectMake(0, 20, 360, 200)]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...