QBImagePicker
QBImagePicker copied to clipboard
All Library Images are shown blurred
When we open the QBImagePicker to select multiple images, All the images have blurred thumbnails.
QBAssetsViewController.m ---> line 451 ---> When first run self.traitCollection no value
My code:
UIWindow *window = [UIApplication sharedApplication].windows.firstObject;
CGFloat fixValue;
if (self.traitCollection.displayScale != 0) {
fixValue = self.traitCollection.displayScale;
} else {
fixValue = window.traitCollection.displayScale;
}
CGSize targetSize = CGSizeScale(itemSize, fixValue);
@wangbiye When i add this lines i solve the problem ?.. because i to have the same problem.... Can you help me..... i am doing in swift...
@sreeji44 I just change a place, which is the relevant code changes after me, but it is Objective-C.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
QBAssetCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"AssetCell" forIndexPath:indexPath];
cell.tag = indexPath.item;
cell.showsOverlayViewWhenSelected = self.imagePickerController.allowsMultipleSelection;
// Image
PHAsset *asset = self.fetchResult[indexPath.item];
CGSize itemSize = [(UICollectionViewFlowLayout *)collectionView.collectionViewLayout itemSize];
/*
change here
*/
UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat fixValue;
if (self.traitCollection.displayScale != 0) {
fixValue = self.traitCollection.displayScale;
} else {
fixValue = window.traitCollection.displayScale;
}
CGSize targetSize = CGSizeScale(itemSize, fixValue);
[self.imageManager requestImageForAsset:asset
targetSize:targetSize
contentMode:PHImageContentModeAspectFill
options:nil
resultHandler:^(UIImage *result, NSDictionary *info) {
if (cell.tag == indexPath.item) {
cell.imageView.image = result;
}
}];
// Video indicator
if (asset.mediaType == PHAssetMediaTypeVideo) {
cell.videoIndicatorView.hidden = NO;
NSInteger minutes = (NSInteger)(asset.duration / 60.0);
NSInteger seconds = (NSInteger)ceil(asset.duration - 60.0 * (double)minutes);
cell.videoIndicatorView.timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld", (long)minutes, (long)seconds];
if (asset.mediaSubtypes & PHAssetMediaSubtypeVideoHighFrameRate) {
cell.videoIndicatorView.videoIcon.hidden = YES;
cell.videoIndicatorView.slomoIcon.hidden = NO;
}
else {
cell.videoIndicatorView.videoIcon.hidden = NO;
cell.videoIndicatorView.slomoIcon.hidden = YES;
}
} else {
cell.videoIndicatorView.hidden = YES;
}
// Selection state
if ([self.imagePickerController.selectedAssets containsObject:asset]) {
[cell setSelected:YES];
[collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
}
return cell;
}
@wangbiye actually i am using the objective c version and converted the code thats all... so QBassetviewcontroller.m page i want to change it right... ok thankz a lot.....
@wangbiye thankz its works
I'm sorry, my English is bad, I cannot quickly understand what you mean. @sreeji44
@wangbiye its ok.. Your code work for me. :)
CGSize targetSize = CGSizeScale(itemSize, fixValue);
This is showing error,
It worked for me when I changed this:
PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init]; options.synchronous = YES; options.networkAccessAllowed = YES; options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
It was options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat before. It used to work even without this though.
This might be super late but can help people in future. Adding a multiplier in QBAssetViewController is the solution that worked for me at line 450. CGSize targetSize = CGSizeScale(itemSize, self.traitCollection.displayScale*4); //self.traitCollection.displayScale = 2. This is a default set in iOS 13.2 (or somewhere around that)
multiplying it by 4 increases the resolution and you see clearer images.