UIScrollView Направление RTL для языков справа налево - PullRequest
10 голосов
/ 04 февраля 2012

Можем ли мы изменить поведение UIScrollView при прокрутке содержимого RTL в обратном режиме.

Ответы [ 5 ]

23 голосов
/ 07 апреля 2016

Этого можно добиться, вращая UIScrollView в дочерних видах на 180 (Пи).

self.scrollView.transform = CGAffineTransformMakeRotation(M_PI);
subView.transform =  CGAffineTransformMakeRotation(M_PI);
6 голосов
/ 06 февраля 2012
count = 6;

[self.scrollView setFrame:CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, 320, 480)];

[pageControl setNumberOfPages:count];

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * count, self.scrollView.frame.size.height);

for(int i=count-1; i>=0; i--) { //start adding content in reverse mode
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * (count - i - 1); //ar
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
    [imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%i.png", i]]];

    [self.scrollView addSubview:imageView];
}

//scroll to the last frame as it's the first page for RTL languages
CGRect frame;
frame.origin.x = scrollView.frame.size.width * (count - 1);
frame.origin.y = 0;
frame.size = scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:NO];

Элемент управления страницы также должен указывать последнюю точку в качестве первой точки (или первой страницы)

- (void)scrollViewDidScroll:(UIScrollView *)sender {
// Update the page when more than 50% of the previous/next page is visible
CGFloat pageWidth = self.scrollView.frame.size.width;
int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
self.pageControl.currentPage = (page % count);
}
4 голосов
/ 10 августа 2016

Я стараюсь, чтобы xCode 7 и iOS 9 работали хорошо.

[self._imagesScrollView  setTransform:CGAffineTransformMakeScale(-1, 1)];
2 голосов
/ 05 марта 2013

Я не уверен, правильно ли я понимаю вопрос, но я так понимаю: вы хотите иметь (скажем так) горизонтальный UIScrollView, где вы можете добавлять элементы справа налево, а когда содержимое превышает рамку просмотра прокрутки, вы хотите иметь возможность прокручивать влево, а не вправо, чтобы увидеть последние элементы.

В этом случае вы можете сделать это. Для каждого нового элемента вычислите общую нужную ширину и установите его как contentOffset:

[scrollView setContentSize:CGSizeMake(self.childView.frame.size.width,
                                      scrollView.frame.size.height)]; 

Выше у меня есть childView, где добавляются элементы. Он расположен в самой правой позиции внутри scrollView минус 1 ширина элемента. Каждый раз, когда добавляется элемент, звоните:

[scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x + kElementWidth,0.0)];

, который сместит все влево. Тогда:

self.videoQueueCollectionView.center = CGPointMake(self.childView.center.x + kElementWidth,
                                                   self.childView.center.y);

Это вернет все обратно туда, где оно было, НО с contentOffset, установленным влево. Это означает, что теперь вы можете прокручивать вправо.

0 голосов
/ 20 сентября 2018

Я использую этот код для Swift 3

self.scrollView.transform = CGAffineTransform(scaleX:-1,y: 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...