UIScrollView Direction RTL适用于从右到左语言



我们可以改变UIScrollView的行为吗?它以反向模式滚动RTL内容。

您可以通过将子视图中的UIScrollView旋转180(Pi)来实现。

self.scrollView.transform = CGAffineTransformMakeRotation(M_PI);
subView.transform =  CGAffineTransformMakeRotation(M_PI);
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);
}

我在xCode 7和iOS 9上试用过,效果很好。

[self._imagesScrollView  setTransform:CGAffineTransformMakeScale(-1, 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);

这将使所有内容都恢复到原来的位置,但内容偏移设置在左侧。这意味着您现在可以向右滚动。

我将此代码用于Swift 3

self.scrollView.transform = CGAffineTransform(scaleX:-1,y: 1);

您可以通过设置semanticContentAttribute 来实现这一点

self.scrollView.semanticContentAttribute = .forceRightToLeft

最新更新