声明
当滚动视图滚动时,scrollview中的图像将获得颜色,滚动结束或滚动后灰度图像将被灰度化。
scrollview中的内容
滚动视图将UIView
和UIImage
作为直接后代。图像可能包含也可能不包含在每个UIView
中。每个UIView
都可能包含文字,文字和文字。图像和图像。
图像分辨率
图像分辨率很小,例如 300x150 , 450x150
我们做了什么?
我们在GPUImage之前遇到过Brad Larson框架。至少可以说框架令人印象深刻,我们对框架提供的所有内容着迷。
我们对框架性能的初步测试令人满意。
我们设法使用GPUImageGrayscaleFilter
将图像插入到滚动视图中时将图像转换为灰度图像。
优化
我们已决定对滚动视图中可见的图像应用滤镜。这将显着降低负载
我们现在在哪里停留?
我们可以通过两种方式将颜色恢复到图像
GPUImageGrayscaleFilter
。 我们无法做到这一点。UIImage
并插入原始图片。正在使用NSURLRequestReturnCacheDataElseLoad
的缓存策略下载图像。 插入下载的图片不会有问题。 无论哪种方式,我们都会应用过滤器并插入相同的图像次数 。我们不确定这一部分。我们错过了一个简单的技巧吗?
我想提前感谢所有人的时间和回应:)
我能够使用GPUImage实现这一目标。
涉及的步骤
UIControlStateNormal
UIButton
,并将灰度转换后的图片从GPUImageGrayScaleFilter
指定为UIControlStateHighlighted
这款旋转木马的性能非常流畅。 GPU Time Elapsed配置文件在开始时有一个峰值,但之后它绝对为零。
随着我们的测试进度,我将更新分析统计数据。
谢谢大家。
答案 0 :(得分:1)
如果您的图像数量有限,则可以下载普通图像,创建灰度副本并将两者保存到磁盘。
在滚动视图中,使用 UIButton 而不是UIImageView,使用自定义类型和清除背景颜色。
UIButton允许您设置different image for different control states
。
将正常和灰度图像设置为正常和选定/禁用状态。对于不需要图像的视图,不要设置图像。
在代表中滚动开始和结束时更改按钮的状态。
P.S。 :你有没有考虑滚动视图的更复杂的后代' UITableView'和' UICollectionView'而不是使用简单的滚动视图?他们会为您节省大量与滚动相关的代码和时间。
答案 1 :(得分:1)
感谢@Swapnil,我能够实现类似旋转木马的效果,在不活动时将图像转换为灰度,并在滚动时获得颜色。
为不同的状态设置不同的图像
UIbutton* someButton = [UIButton buttonWithType:UIButtonTypeCustom];
[someButton setBackgroundImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
GPUImageGrayscaleFilter* grayScaleFilter = [[GPUImageGrayscaleFilter alloc] init];
[someButton setBackgroundImage:[grayScaleFilter imageByFilteringImage:imageToBeTransformed] forState:UIControlStateHighlighted];
滚动视图开始滚动(增益颜色)时更改状态
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
for(id view in scrollView.subviews) {
if([view isKindOfClass:[UIButton class]]) {
[self highlightButtons];
}
}
}
我的滚动视图中的某些视图不需要此效果,因此我使用标记
将其过滤掉 -(void) scrollViewDidScroll:(UIScrollView *)scrollView {
for(id view in scrollView.subviews) {
if([view isKindOfClass:[UIButton class]]) {
if(((UIView*)view).tag == kRequiresScrollEffectChange)
[self highlightButtonsInView:(UIView*) view];
}
}
}
滚动浏览滚动视图时,状态恢复正常
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate) {
[self normalizeHighlightedButtonsInScrollview:scrollView];
}
}
-(void)scrollViewDidEndDecelerating:(UIView *)scrollView
{
[self normalizeHighlightedButtonsInScrollview:scrollView];
}
突出显示按钮以通过动画获取颜色并将其标准化为灰度图像
-(void) highlightButtonsInView:(UIView*) view
{
for(id object in view.subviews)
{
if([object isKindOfClass:[UIButton class]]
{
[self changeButtonState:object willHighlight:YES];
}
}
}
-(void) normalizeButtonsInView:(UIView*) view
{
for(id object in view.subviews)
{
if([object isKindOfClass:[UIButton class]]
{
[self changeButtonState:object willHighlight:NO];
}
}
}
-(void) normalizeHighlightedButtonsInScrollview:(UIScrollView*) scrollView
{
for(id view in scrollView.subviews)
{
if(((UIView*)view).tag == kRequiresScrollEffectChange)
{
[self normalizeButtonsInView:view];
}
}
}
-(void) changeButtonState:(UIButton)button willHighlight:(BOOL) enableDisable
{
[UIView transitionWithView:button
duration:2.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{ [button setHighlighted:enableDisable]; }
completion:nil];
}