我有UIScrollView
个子视图。它包含产品/项目的结果列表。 UIView
UIImageView
和UILabel
。它可能包含许多项目。我的问题是当我按下按钮(网格按钮)将UI结果更改为网格视图时,它需要一些时间才能完成处理。有没有办法让这更快?比如删除在屏幕/ UIScrollView中看不到的图像?
这是我的listView代码
-(void)actionList {
NSLog(@"List!!");
isGrid = NO;
for(UIView*iView in sv_results.subviews){
for(UILabel *iView2 in iView.subviews){
if([iView2 isMemberOfClass:[UILabel class]]){
if(iView2.tag == 0)
{
iView2.frame = CGRectMake(80, 0, 150, 50);
iView2.font = [UIFont boldSystemFontOfSize:12.0f];
}
else if(iView2.tag == 1)
{
pricewidth = [iView2.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13.0f]}];
iView2.frame = CGRectMake(80, 20, pricewidth.width+1, 50);
iView2.font = [UIFont systemFontOfSize:13.0f];
for(UIView *discountline in iView2.subviews)
{
discountline.frame = CGRectMake(0, iView2.frame.size.height/2, iView2.frame.size.width, 1);
}
}
else if(iView2.tag == 2)
{
iView2.frame = CGRectMake(screenRect.size.width-60, 30, 50, 15);
iView2.font = [UIFont systemFontOfSize:10.0f];
}
else if(iView2.tag == 3)
{
iView2.frame = CGRectMake(140, 20, 150, 50);
iView2.font = [UIFont systemFontOfSize:13.0f];
}
else {
iView2.frame = CGRectMake(80, 0, 150, 50);
iView2.font = [UIFont boldSystemFontOfSize:12.0f];
}
}
if([iView2 isMemberOfClass:[AsyncImageView class]]){
iView2.frame = CGRectMake(15,12,50,50);
iView2.layer.cornerRadius = 5;
}
}
for(int i = 0;i<=allAvailableData;i++)
{
if(iView.tag == i)
{
iView.frame = CGRectMake(0,((i-1)*75),320,75);
}
//sv_results.contentSize = CGSizeMake(320,yPosition);//optional resize height scrollview from gridview
}
iView.layer.borderWidth = .3f;
}
sv_results.contentSize = CGSizeMake(320,(allAvailableData)*75);
}
答案 0 :(得分:1)
由于图像可能需要一些时间。如果您在主线程中加载大量图像,那么花一些时间是正常的。尝试使用UITableView加载延迟图像。我在我的项目中使用它,易于实现和使用。 http://www.theappguruz.com/sample-code/ios-lazy-loading-images/有一些代码和帮助。我没有检查这个,但它看起来也很好https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html
答案 1 :(得分:0)
只需使用
scrollView.delaysContentTouches = NO;
一个布尔值,用于确定滚动视图是否延迟处理触摸手势。
如果此属性的值为YES,则滚动视图会延迟处理触摸手势,直到它可以确定滚动是否为意图。如果值为NO,则滚动视图立即调用touchesShouldBegin:withEvent:inContentView:。默认值为YES。
这意味着,默认情况下,scrollView会延迟触摸,您可以通过上面的代码禁用该功能,
希望它能解决你的问题。
答案 2 :(得分:0)
我认为您应该实施 UITableView ,并且可以使用“ dispatch_async ”加载图片,这样就不会花费时间。我希望你能以这种方式得到解决方案。