По сути, я делаю снимок представления, применяю к нему размытие, а затем использую его в качестве размытого наложения uiview в повторно используемых ячейках представления коллекции в простом представлении uicollectionview.
// Capture Screen for blurr.
-(UIImage *) captureScreen:(CGRect)frame
{
CGRect grabRect = frame;
//for retina displays
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
UIGraphicsBeginImageContextWithOptions(grabRect.size, NO, [UIScreen mainScreen].scale);
}
else
{
UIGraphicsBeginImageContext(grabRect.size);
}
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, -grabRect.origin.x, -grabRect.origin.y);
[self.contentView.layer renderInContext:ctx];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
viewImage = [viewImage applyBlurWithRadius:1.8f tintColor:nil saturationDeltaFactor:1.0 maskImage:viewImage atFrame:self.imageView.frame];
return viewImage;
}
// Set blurred image as image view image.
- (void) updateBlur
{
UIImage* infoViewImage = [self captureScreen:self.infoView.frame];
self.infoImageView.image = infoViewImage;
}
// Prepare for reuse.
- (void) prepareForReuse
{
self.infoImageView.image = nil;
}
Обратите внимание, что uiimageview создается и добавляется как подпредставление к элементу contentView ячейки при инициализации. Всякий раз, когда я прокручиваю медленно, это работает нормально. Если я быстро прокручиваю, изображение будет удаляться из представления изображения только иногда... Я не совсем понимаю, почему это происходит. До сих пор я пробовал несколько решений, даже удаляя весь uiimageview из супервизора и каждый раз повторно инициализируя/повторно добавляя его в качестве подвида, но это действие имеет ту же проблему. Пожалуйста помоги!
prepareForReuse
вызывается только тогда, когда ячейка берется из очереди повторного использования вcellForRowAtIndexPath
, и, предположительно, в этот момент вы замените изображение другим. - person user3386109   schedule 28.03.2014.image = nil
не имеет никакого эффекта, если вы впоследствии установите.image = infoViewImage
в cellForRowAtIndexPath. С другой стороны, если вы установите.image = nil
, но не установите.image = infoViewImage
, что тогда? - person user3386109   schedule 28.03.2014