UIImageViewsでiCarouselを使用するのに問題はなく、すべてがうまく機能します。
ただし、画像に描画を追加したかったので、画像を含み、カスタム描画ルーチンを備えたUIViewの簡単なサブクラスを作成しました。十分に単純です。ただし、viewForItemAtIndex内で、imageプロパティを設定すると、視覚的に更新されません。代わりに、表示されている画像、つまり最初に読み込まれたオブジェクトを表すn個の画像を繰り返します。
たとえば、26枚の画像a--zがあります。5起動時に表示されます、a-e。'setNeedsReload'がないと、ビューをスクロールすると、-zではなくa-eの画像が繰り返し表示されます。
setImageプロパティ内に' setNeedsDisplay 'を追加すると、正しく機能することがわかりました。ただし、パフォーマンスが大幅に低下します。
私の質問は2つあります:
- 私は何かが足りないのですか?
- 代わりにUIImageViewを拡張して、NickがFXImageで行ったように、「processImage」スタイルのメソッド内でカスタム描画を行う必要がありますか?
ありがとう、
/// GroupImageView.m
- (void)setImage:(UIImage *)newImage {
image = newImage;
[self setNeedsDisplay];
}
// override of the drawRect routine.
- (void)drawRect:(CGRect)rect {
// only draw if we have an image to draw
if (image) {
CGContextRef context = UIGraphicsGetCurrentContext();
// blah blah, fancy drawing crap
CGContextRotateCTM (context, radians((rand() % 5 + 2)));
CGContextTranslateCTM(context, -0.5f * insetRect.size.width, -0.5f * insetRect.size.height);
CGContextFillRect(context,insetRect);
// etc
[image drawInRect:insetRect blendMode:kCGBlendModeNormal alpha:[self alpha]];
// etc
}
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
if (view == nil) {
view = [[GroupImageView alloc] initWithImage:[UIImage imageNamed:@"Loading.png"]];
}
CGImageRef ref = [group posterImage];
UIImage* coverImage;
if (ref) {
coverImage = [UIImage imageWithCGImage:ref scale:1/scaleFactor orientation:UIImageOrientationUp];
}
else {
coverImage = [UIImage imageNamed:@"Sunflower.png"];
}
[(GroupImageView*)view setImage:coverImage];
return view;
}