【发布时间】:2019-11-25 12:10:46
【问题描述】:
我正在尝试使用 UIScrollView 创建动态图像滑块。所以在我转到预期页面之前,我发送需要多少图像,然后将滚动视图设置为将这些图像作为子视图,并在 5 秒内使用 NSTimer 自动滚动它们直到结束,然后回到开头。
当 Scrollview 第一次遍历图像时会出现问题,它显示图像 + 下一张图像的一部分。然后当滑动到下一张图像时,它会显示部分 3ed 图像.. ect
一旦滚动视图第一次浏览所有图像,然后返回第一张图像,一切都很好,所有图像都采用正确的大小。
我尝试了所有我能想到的方法,但没有运气!也许我对这份工作使用了错误的观点?我不知道..
这是我用来配置 uiscolview 的函数(在 ViewDidlayout 中调用):
scrollview = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.scrolSV.frame.size.height)];
scrollview.delegate = self;
[scrollview setPagingEnabled:YES];
[scrollview setAlwaysBounceHorizontal:NO];
[scrollview setShowsVerticalScrollIndicator:NO];
[scrollview setShowsHorizontalScrollIndicator:NO];
scrollview.contentInset = UIEdgeInsetsZero;
scrollview.clipsToBounds= YES;
CGFloat xOrigin ;
NSArray * tempList = [self.sightseeing.images allObjects];
NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image_counter"
ascending:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.is_image = %@", @(YES)];
ImagesList = [tempList filteredArrayUsingPredicate:predicate];
ImagesList = [ImagesList sortedArrayUsingDescriptors:@[sortDescriptor]];
self.paging.numberOfPages = [ImagesList count];
selectedOffset = 0 ;
for (int i = 0 ; i< [ImagesList count]; i++){
xOrigin = self.view.frame.size.width * i ;
Images * object = [ImagesList objectAtIndex:i];
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollview.frame.size.width, scrollview.frame.size.height)];
imageView.autoresizingMask = NO ;
if (object.image.length > 5) {
imageView.image = [UIImage imageWithData:object.image];
}
else
{
imageView.image = [UIImage imageNamed:Image_Placeholder];
}
[imageView setContentMode:UIViewContentModeScaleAspectFill];
[scrollview addSubview:imageView];
}
[scrollview setContentOffset:CGPointMake(0, 0)];
[scrollview setContentSize:CGSizeMake(self.scrolSV.frame.size.width * [ImagesList count] , self.scrolSV.frame.size.height)];
[self.scrolSV addSubview:scrollview];
这是 ScrolDidScroll 方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[imageTimer invalidate];
if (![imageTimer isValid]) {
imageTimer = [NSTimer scheduledTimerWithTimeInterval:Timer_Length target:self selector:@selector(updateImages) userInfo:nil repeats:YES];
}
int offset = (int)scrollview.contentOffset.x /scrollView.frame.size.width;
self.paging.currentPage = offset;
if (selectedOffset != offset) {
selectedOffset = offset;
UIImageView * imageV= [scrollView.subviews objectAtIndex:offset];
Images * image = [ImagesList objectAtIndex:offset];
if (![image.image length]) {
[QBRequest downloadFileFromClassName:Sightseeing_Table_Name objectID:self.sightseeing.object_id fileFieldName:image.field_id
successBlock:^(QBResponse *response, NSData *loadedData) {
if (loadedData.length > 100) {
image.image = loadedData;
imageV.image = [UIImage imageWithData:image.image];
[imageV setContentMode:UIViewContentModeScaleAspectFill];
}
} statusBlock:^(QBRequest *request, QBRequestStatus *status) {
} errorBlock:^(QBResponse *error) {
}];
}
}
}
【问题讨论】:
-
您使用的是 iOS 还是 MacOS?您使用 iOS 进行了标记,但可能是指 MacOS 特定功能
viewDidLayout(您拼写为 ViewDidlayout)。 -
这是 iOS,你可以在我分享的截图中看到。
-
真的!那么你在哪里设置滚动视图呢?
-
ViewDidLayout,但我也尝试在 ViewDidLoad、WillApear 和 DidApear 上设置,每次都得到相同的结果。
标签: ios objective-c uiscrollview slider