2012-02-04 5 views
4

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

+0

Что вы имеете в виду? Прокрутка просмотров прокрутить оба пути в любом случае! – jrtc27

+1

просто идея, я должен начать размещать контент (используя addSubViews) внутри UIViewScroller с отрицательной стороны (по оси x), чтобы начать с –

+0

, попробуйте следовать этой ссылке https://medium.com/if-let-swift -programming/working-with-localization-in-swift-4a87f0d393a4 – Johnykutty

ответ

4
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); 
} 
+0

Что меня больше волнует сейчас, если яблоко поймет и одобрит обратное поведение UIScrollView и PageControl, хотя это вполне логично и понятно для права на левый язык (арабский, иврит) говорящих парней. –

+0

Ты моя спасательная жизнь –

1

Я не уверен, если я понимаю вопрос правильно, но я понимаю, как это : Вы хотите иметь (скажем) горизонтальный 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); 

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

13

Вы можете достичь этого, повернув UIScrollView в детском виде на 180 (Pi).

self.scrollView.transform = CGAffineTransformMakeRotation(M_PI); 
subView.transform = CGAffineTransformMakeRotation(M_PI); 
+1

Я не поклонник решения, но после слишком много часов, пытаясь решить эту проблему, это фактически решило ее. +1 – NikMos

+0

Это хорошее решение, если вам не требуется прокрутка: в этом случае он будет наверху. – Maria

+0

Быстрый эквивалент: scrollView.transform = CGAffineTransform (rotationAngle: CGFloat (Double.pi)); subview.transform = CGAffineTransform (rotationAngle: CGFloat (Double.pi)); – Groot

3

Я пробовал его для xCode 7 и iOS 9 работает хорошо.

[self._imagesScrollView setTransform:CGAffineTransformMakeScale(-1, 1)]; 
+0

это решение переворачивает все, включая текст в обратном порядке, если метки находятся в режиме прокрутки. Решение kumarPv прекрасно работает, чтобы исправить это. – greenhouse

+0

Несомненно, это правда, он просто используется с изображениями. –

Смежные вопросы