how to copy ui image to another variable? - ios

i want to set uiimage to a variable outside the scope of function .i tried the code below but it doesn't work . code below is used in custom uitable view cell class . so i just cannot alloc and init it . as this will cause to initialize it every time cell is displayed/ scrolled
uiimage *img;
[manager downloadWithURL:[NSURL URLWithString:friendData.picUrl] options:SDWebImageRefreshCached progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
img =image; ////this is not working !!
}];
dispatch_async(dispatch_get_main_queue(), ^{
[cell.profileImage setImage:img]; //and off course this wont work too
});

I think you may just need to set __block UIImage image = nil;

You can initialize the image1 with any other initializing methods:
Try this one:
image1 = UIImage.init(CGImage:image.CGImage);
Initializer method will create new object as per this document.
I haven't tried it. Please try if it works. If not working just comment me, I may find other solution.

you need to allocate image1 to make it work out of the function.try this
image1 = [[UIImage alloc] initWithCGImage: image.CGImage];

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 :)

How to use SDWebImage to cache image for multiple sized images

From my web service i am getting multiple sized images. I m loading them in TableView. When i m loading them new images which haven't cached yet flickers between placeholder and original image, or sometimes the image appear as smaller than the usual size. But just a bit scrolling down or up actually fix the problem but i want them to be at original size from the beginning. But it would appear in original shape from the next time i suppose because the picture was already cached
Initially
After a bit scrolling
My code in cellForRowAtIndexPath:
[cell.image sd_setImageWithURL:[NSURL URLWithString:[NSMutableString stringWithFormat:#"%#app/media/access/pictures?p=%#",baseurl,data.picPath]]
placeholderImage:[UIImage imageNamed: #"image_loader.gif"]];
then in heightForRowAtIndexPath:
NSURL *filePath = [NSURL URLWithString:[NSMutableString stringWithFormat:#"%#app/media/access/pictures?p=%#",baseurl,data.picPath]];
NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:filePath];
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
self.img = image;
if (self.img.size.width > CGRectGetWidth(self.view.bounds)) {
CGFloat ratio = self.img.size.height / self.img.size.width;
return CGRectGetWidth(self.view.bounds) * ratio+140;
} else {
return self.img.size.height+180;
}
I have visited https://github.com/rs/SDWebImage and in their common problem section they have mentioned about the problem but the suggested solution didn't work for me!!!
Actually what i did, i checked if the image was cached already and if not i have downloaded it asynchronously under heightForRowAtIndexPath:
if(image != NULL)
{
self.img = image;
}
else
{
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
[downloader downloadImageWithURL:filePath
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
// do something with image
self.img = image;
}
}];
}

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