The UICollectionView cells are jerking while scrolling the UICollectionView - ios

Hi all i am a newbie in IOS Development and i have a UICollection where i am loading images with SDWebImageCache. The problem is my UICollectionview cell feels like jerking or shivering while scrolling fast.
Below I post my code for loading images with SDWebImageCache
[_homeCellImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",[dictionary objectForKey:#"user_image"],[QPCommonClass cropImageWithWidth:500 andHeight:500]]] placeholderImage:[UIImage imageNamed:#"defaultIcon"]];
[_qpQuestionImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",[dictionary objectForKey:#"image"],[QPCommonClass cropImageWithWidth:1400 andHeight:1200]]] placeholderImage:[UIImage imageNamed:#"question"] options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){
[_qpHomeActivityIndicator setHidden:YES];
[_qpHomeActivityIndicator stopAnimating];
}];
where _homeCellImage & _qpQuestionImage are UIImageViews

Make sure to load the image in a background thread.
Once the image is loaded make sure to cache it.
Now when you set the image via cellForItem, the image can be loaded directly from cache, and it should be a lot smoother.

Try to do like this--
[_homeCellImage setShowActivityIndicatorView:YES];
[_homeCellImage setIndicatorStyle:UIActivityIndicatorViewStyleGray];
[_homeCellImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",[dictionary objectForKey:#"user_image"],[QPCommonClass cropImageWithWidth:500 andHeight:500]]] placeholderImage:[UIImage imageNamed:#"defaultIcon"] options:SDWebImageRefreshCached];
[_qpQuestionImage setShowActivityIndicatorView:YES];
[_qpQuestionImage setIndicatorStyle:UIActivityIndicatorViewStyleGray];
[_qpQuestionImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",[dictionary objectForKey:#"image"],[QPCommonClass cropImageWithWidth:1400 andHeight:1200]]] placeholderImage:[UIImage imageNamed:#"question"] options:SDWebImageRefreshCached];

You have to add these 2 lines after your dequeue.
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

Related

How to set progressive image in iOS using SDWebImage?

I tried to load an image progressively in my app. Basically what I tried is while the image is loading, I want to show the fully loaded image from blurred state. I tried,
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:[NSURL URLWithString:#"https://profile.microsoft.com/RegsysProfileCenter/Images/personal_info.jpg"]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
[self.profileBtn setImage:[UIImage imageWithData:[NSData dataWithBytes:&receivedSize length:sizeof(receivedSize)] scale:15] forState:UIControlStateNormal];
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// [self.profileBtn setImage:image forState:UIControlStateNormal];
}
}];
Is it possible to load an image progressively using SDWebImage. Please help me with this.
You can try this implementation
+ (void)loadImageWithURLString:(NSString *)urlString forImageView:(UIImageView *)imageView {
[imageView sd_setImageWithURL:[Utilities stringToURL:urlString]
placeholderImage:[UIImage placeHolderImage]
options:SDWebImageProgressiveDownload];
}
The option says that
/**
* This flag enables progressive download, the image is displayed progressively during download as a browser would do.
* By default, the image is only displayed once completely downloaded.
*/
SDWebImageProgressiveDownload = 1 << 3,
You can show percentage of downloading on temp label or below activity indicator (can show activityindicator on image view or button till download is not completed) like in progress block,
NSInteger downloadCompleted = (receivedSize/ expectedSize) * 100;
label.text = downloadCompleted; //temp label on image view or below activityindicator
Hope this will help :)

I am loading image in table view cell asynchronously It's working perfectly fine but when i scroll down the image is flickering

I am loading image in table view cell asynchronously It's working perfectly fine but when i scroll down the image is flickering...
import "UIImageView+WebCache.h"
[cell.imgProfilePic sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#",[arrSearchedPic objectAtIndex:indexPath.row]]]
placeholderImage:[UIImage imageNamed:#"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
NSLog(#"download completed...");
}];
user this code as well still image flicker is there anything which i am missing please let me know
any help will be appreciable.
Thank you
Use SDWebImage for load asynchronously image
Use this link
https://github.com/rs/SDWebImage
https://github.com/rs/SDWebImage download the library ..add files in the folder add all the files from SDWebImage folder into your project and import this file #import "UIImageView+WebCache.h"
the add this to you cellforRow at index path method
[cell.imgProfileImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#",[profileImage objectAtIndex:indexPath.row]]] placeholderImage:[UIImage imageNamed:#"unchecked.png"] options:SDWebImageRefreshCached];
cell.imgprofileImage will be you imageview in which you want to load the data..

No visible #interface for 'UIImageView' declares the selector 'setImageWithURL

Hi I have a problem with new Xcode and AFNetworking.
On xcode5 I don't have that problems but I start to make some changes and updates.
Problem is:
No visible #interface for 'UIImageView' declares the selector
'setImageWithURL
And code part:
NSString *showThumb = [[[[SettingDataClass instance] getSetting] objectForKey:#"appearance_option"] objectForKey:#"category_browse_show_thumb"];
if([showThumb isEqualToString:#"show"])
{
UIImageView *img = [[UIImageView alloc] init];
img = cell.imageView;
[cell.imageView setImageWithURL:[NSURL URLWithString:[[ToolClass instance] decodeHTMLCharacterEntities:[[aryDic objectAtIndex:indexPath.row] objectForKey:#"thumb"]]]
placeholderImage:[UIImage imageNamed:NSLocalizedString(#"image_loading_placeholder", nil)]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
img.image = [[ToolClass instance] imageByScalingAndCroppingForSize:CGSizeMake(57, 57) source:image];
}];
Where could be a problem and why this code doesn't work with Xcode6?
I will be very grateful for help
Try including "UIImageView+AFNetworking.h" in the file that uses the method.
UIImageView does not work like that. You will need to add AFNetworking's UIImageView category to get the setImageWithURL method.
Here is the apples documentation about UIImageView. As You can see there is no method like setImageWithURL.
AFNetworking has subclass of UIImageView. It has a method named setImageWithURL. If you want to use this method you need to import that class. Hope this helps.. :)
You should be writing this:
img = cell.imageView;
[cell.imageView setImageWithURL:[NSURL URLWithString:[[ToolClass instance] decodeHTMLCharacterEntities:[[aryDic objectAtIndex:indexPath.row] objectForKey:#"thumb"]]]
placeholderImage:[UIImage imageNamed:NSLocalizedString(#"image_loading_placeholder", nil)]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
img.image = [[ToolClass instance] imageByScalingAndCroppingForSize:CGSizeMake(57, 57) source:image];
}];
And your cell should have a UIImageView+AFNetworking type of imageView.

How to load an image from URL in app Extension?

I have implemented an app extension for my application, but i am facing an issue when trying to load an image from a URL into an imageView.
I tried to use PAImageView and UIImageView but both with failure.
The code that i was using for PAImageView is the following:
[self.imageView setImageURL:[NSURL URLWithString:#"https://blabblaLogo.jpg"]];
self.userImageView.clipsToBounds = YES;
and tried to use SDWebImage for UIImageView with the following:
[self.imageView setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:#"default.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
}];
and the image doesnt appear in both cases. Note that a default image from assets is displayed correctly without any issue.
Is it possible to load an image from a URL in an app Extension? and how can we achieve that?
Thank you.
Am using something like this and it's work good until this issues fixed
cell.avatar.image = [UIImage imageNamed:#"selection-box_emty.png"];
// Load the image with an GCD block executed in another thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:Arr[indexPath.row][#"avatar"]]];
if (data) {
UIImage *offersImage = [UIImage imageWithData:data];
if (offersImage) {
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *offersImage = [UIImage imageWithData:data];
cell.avatar.image = offersImage;
});
}
}
});
I faced a similar problem, put breakpoints into into library and problem apparently was App Tranport Security. We need separate App Transport Security Settings for every extension we add
Try This in your Image url
If image url contain any space it will add %20 and work fine
[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

SDWebImage setImageWithURL return empty outside any other method than cellForRowAtIndexPath

I am using SDWwbImage, wich i download from here:
https://github.com/rs/SDWebImage
I tested in the method: cellForRowAtIndexPath and everything works fine, here is my code:
[cell.image setImageWithURL:[NSURL URLWithString:object.imageUrl]];
Now i need to call an image outside this method (eg: heightForRowAtIndexPath, viewDidLoad), and i always get no image, here is my code:
UIImageView *test = [[UIImageView alloc] init];
[test setImageWithURL:[NSURL URLWithString:categories.imageUrl]];
NSLog(#"height: %f", test.image.size.height);
Is it disallowed to use setImageWithURL anywhere? how can i solve this?
EDITED
I tried to add the completion block to know when the download is finished and refresh the uitablevew, here is my code:
UIImageView *test = [[UIImageView alloc] init];
[test setImageWithURL:[NSURL URLWithString:object.imageUrl]
placeholderImage:[UIImage imageNamed:#"ic_launcher_57#2x.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
counterY++;
if (counterY == counterX) {
NSLog(#"reloading");
[self.tableView reloadData];
}
}];
But only the first time the controller is loaded, this doesnt work. Every time after this everything is fine.It looks like something cancel de download the first time.

Resources