gpt4 book ai didi

ios - UIScrollview 为 subview 添加一些额外的空间

转载 作者:行者123 更新时间:2023-11-29 05:35:41 24 4
gpt4 key购买 nike

我正在尝试使用 UIScrollView 创建动态图像 slider 。因此,在我转到预期页面之前,我发送需要多少图像,然后将 ScrollView 设置为将这些图像作为 subview ,并使用 5 秒 NSTimer 自动滚动它们直到结束,然后返回到开头。

当 Scrollview 第一次浏览图像时,会出现该问题,它会显示图像 + 下一张图像的一部分。然后当滑动到下一个图像时,它会显示 3ed 图像的一部分.. 等

一旦 ScrollView 第一次浏览完所有图像,然后返回到第一张图像,一切都很好,并且所有图像都具有正确的尺寸。

我尝试了所有我能想到的方法,但没有成功!也许我对这项工作使用了错误的观点?我不知道..

这是我用来配置 uiscrolview 的函数(在 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];

这是 ScrolDidScrol 方法:


- (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) {

}];
}
}


}

这是第一次查看时的图片enter image description here

浏览图像后,它显示如下: enter image description here

最佳答案

几年前,我在文图拉县动物服务 (VCAS) 移动应用程序中实现了类似的功能(仍然可以免费下载)。我使用了 Grant Davis 的一个名为 FGallery 的库。我不知道这是否仍然可用,但他们做得很好,包括支持缩略图和全尺寸图像查看、加载指示器、在实际图像尚未完成下载时显示占位符图像的能力等。如果可以的话我会亲自去看看。也许您只需要借用他们的一些技术,或者只是使用他们所做的事情。速度非常快,而且我的雇主在这方面要求非常高。

https://github.com/gdavis/FGallery-iPhone

关于ios - UIScrollview 为 subview 添加一些额外的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57062635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com