Im Moment wird ein ImageScroller von UIScrollView bereitgestellt, und es enthält eine Filter-Symbolleiste am unteren Rand, wie Sie auf dem Bild sehen können.Anwenden von Filter auf den aktuellen Bildindex in UIScrollView GPUImage
Aber im vor einem Problem ist, dass, wenn ich die Taste drücken, wird die Filter nur unten an das letzte Bild als Beispiel gelten:
Gif
Beispiel
Also bitte jeder kann mir helfen, dieses zu lösen, meine erwartete Ausgabe ist der Filter wird auf das aktuelle angezeigte Bild angewendet, nicht nur das letzte ein. Hier würde ich meinen Code als Referenz beifügen und vielen Dank.
@interface EditImageVC()
@end
@implementation EditImageVC
UIImageView *img;
- (void)viewDidLoad {
[super viewDidLoad];
int x=0;
for (int i = 0; i < _scrollViewImageArray.count ; i++) {
_picture = [_scrollViewImageArray objectAtIndex:i];
img =[[UIImageView alloc]initWithFrame:CGRectMake(x,20,[[UIScreen mainScreen] bounds].size.width,
self.imgScrollView.frame.size.height)];
img.image =_picture;
x=x+[[UIScreen mainScreen] bounds].size.width;
[_imgScrollView addSubview:img];
}
_imgScrollView.backgroundColor = [UIColor blackColor];
_imgScrollView.contentSize=CGSizeMake(x,
_imgScrollView.frame.size.height);
_imgScrollView.contentOffset=CGPointMake(0, 0);
img.contentMode = UIViewContentModeScaleAspectFit;
}
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
- (IBAction)filterAction:(UIButton *)sender {
for (int i = 0; i < _scrollViewImageArray.count ; i++) {
UIImage *picture = [_scrollViewImageArray objectAtIndex:i];
GPUImageFilter *selectedFilter;
switch (sender.tag) {
case 0:
selectedFilter = [[GPUImageSepiaFilter alloc] init];
break;
case 1:
selectedFilter = [[GPUImageToonFilter alloc] init];
break;
default:
break;
}
UIImage *filteredImage = [selectedFilter imageByFilteringImage:picture];
[img setImage:filteredImage];
}
}
Danke für deine Antwort, habe ich versucht, beide Lösungen aber es funktioniert nicht. Für die zweite Lösung wurde eine Ausnahme für die Schleife (UIImageView * subview ... in ..) ausgelöst. Die Ausnahme ist: [UIScrollView countByEnumeratingWithState: objects: count:] –
Ich habe vergessen, in meinem Beispiel ein Othing durchzuführen. init 'imageViewsArray' in' viewDidLoad'. Hast du das versucht? @DuyKhanhNguyen – Codus
Vielen Dank, es ist wahr, dass wir das ImageArray initiieren müssen, und das erste ist gearbeitet, aber über das zweite, können Sie erneut die for-Schleife ?. Cuz muss ich Filter auf das aktuelle Bild anwenden, nicht das ganze alles.Ich meine, wenn ich zu jedem Bild scrollen, sollte es den Filter auf das Bild anwenden –