Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3679494
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 19, 20262026-05-19T03:27:57+00:00 2026-05-19T03:27:57+00:00

I’m having a problem with the following code. I want to use one UIImageView

  • 0

I’m having a problem with the following code.

I want to use one UIImageView on more than 1 button, it seems logical to me to only define the UIImageView once and use it as many times as necessary.

If I try to attach the imgView1 to two different buttons only one of them is displayed.

I can get round this by using the commented out imgView2.

But it seems silly that I have to do this. Why can’t I just have one UIImageView and then add it to as many views as I require?

// This will not allow me to use imgView1 more than once and only one of the imgViews/buttons is displayed.
UIImage *image          = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"some_image" ofType:@"png"]];
    UIImageView *imgView1   = [[UIImageView alloc] initWithImage:image];
    //UIImageView *imgView2 = [[UIImageView alloc] initWithImage:image];

    CGRect frame = CGRectMake(10, 10, 70, 72);

    UIButton *h=[UIButton buttonWithType:UIButtonTypeCustom];
    [h setFrame:frame];
    [h insertSubview:imgView1 atIndex:1];

    frame = CGRectMake(100, 10, 70, 72);

    UIButton *h2=[UIButton buttonWithType:UIButtonTypeCustom];
    [h2 setFrame:frame];
    [h2 insertSubview:imgView1 atIndex:1];

    [self.view addSubview:h];
    [self.view addSubview:h2];

    [imgView1 release];
    //[imgView2 release];

Edit:

Context

I’ve added some Context to my question

I am trying to create an image with a gradient background layer that sits behind the actual image, and is a follow-up question to this one (URL: Making a Transparent image button with bgcolor)

Whilst I can simply use setImage, it will not put the gradient background layer into the background.

For example:

int fullFrameX  = 25;
int extFrameX   = fullFrameX + 3;

CGRect fullFrame;
CGRect frame;

fullFrame = CGRectMake(fullFrameX, 10, 70,72);  
frame = CGRectMake(extFrameX, 13, 63,65);

UIButton *h=[UIButton buttonWithType:UIButtonTypeCustom];
[h setFrame:fullFrame];
[[h layer] setMasksToBounds:YES];
//[h setBackgroundImage:image forState:UIControlStateNormal];
[h setImage:image forState:UIControlStateNormal];
[h setShowsTouchWhenHighlighted:YES];
[h setClipsToBounds:YES];


CAGradientLayer *gradientLayer = [[CAGradientLayer alloc] init];
[gradientLayer setBounds:frame];
[gradientLayer setPosition:CGPointMake([h bounds].size.width/2, [h bounds].size.height/2)];
[gradientLayer setColors:[NSArray arrayWithObjects:
                          (id)[[UIColor colorWithRed:255 green:0 blue:255 alpha:0]CGColor],(id)[[UIColor blackColor] CGColor], nil]];
[[h layer] insertSublayer:gradientLayer atIndex:1];

//[h insertSubview:imgView atIndex:1];

[h setTag:0];
[h addTarget:self action:@selector(btnSelectColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:h];
//[imgView release];

[gradientLayer release];

This is a canabalised version of my original code (from previous question), what its doing is its putting the image at the same level as my gradient background.

In my previous question I alluded to the answer of using UIImageViews to do most of the heavy lifting, except the problem I’m facing is that I have to create multiple UIImageViews
when I really just need to create it once.

The idea is to have 4 buttons, each with a colored background from which the user can click to choose their color scheme.

Its a bit hard to explain, but I’ll try and break it down into a list.

  1. An image (avatar) is the top layer
  2. A gradient background is in the background and is forced into a frame
  3. The whole object is clickable
  4. I should only have to init 1 UIImageView for every time I want to use it but am forced to create multiple copies of the same UIImageView.

I hope this clarifies the context of my problem.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-19T03:27:57+00:00Added an answer on May 19, 2026 at 3:27 am

    http://coffeeshopped.com/2010/09/iphone-how-to-dynamically-color-a-uiimage

    The above URL helped me resolve the problem now.

    -(UIImage *)createGradientImage:(NSString *)name withTopColor:(CGColorRef)topColor withBottomColor:(CGColorRef)bottomColor
    {
        UIImage *image      = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:@"png"]];
        // load the image   
        // begin a new image context, to draw our colored image onto
        UIGraphicsBeginImageContext(image.size);
    
        // get a reference to that context we created
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        // set the fill color
        //UIColor *color = [UIColor redColor];
        //[color setFill];
    
        // translate/flip the graphics context (for transforming from CG* coords to UI* coords
        CGContextTranslateCTM(context, 0, image.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
    
        // set the blend mode to color burn, and the original image
        //CGContextSetBlendMode(context, kCGBlendModeColorBurn);
        //CGContextSetBlendMode(context, kCGBlendModeColor);
        CGRect rect         = CGRectMake(0, 0, image.size.width, image.size.height);
        CGRect rectInternal = CGRectMake(3, 3, image.size.width-6, image.size.height-6);
        //CGContextFillRect(context, rectInternal);
    
        //CGColorRef topColor       = [[UIColor colorWithRed:0.0 green:5.0 blue:0.0 alpha:1.0]CGColor];
        //CGColorRef bottomColor    = [[UIColor blackColor]CGColor];
    
        NSArray *colors = [NSArray arrayWithObjects: (id)topColor, (id)bottomColor, nil];
        CGFloat locations[] = {0, 1};
    
    
        CGGradientRef gradient =
        CGGradientCreateWithColors(CGColorGetColorSpace(topColor),
                                   (CFArrayRef)colors, locations);
    
        // the start/end points
        CGPoint top = CGPointMake(CGRectGetMidX(rectInternal), rectInternal.origin.y);
        CGPoint bottom = CGPointMake(CGRectGetMidX(rectInternal), CGRectGetMaxY(rectInternal));
    
        // draw
        CGContextDrawLinearGradient(context, gradient, top, bottom, 0);
    
        CGGradientRelease(gradient);
    
    
        //For fillcolors
        //CGContextFillRect(context, rect);
    
        CGContextDrawImage(context, rect, image.CGImage);
    
        // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle
        //CGContextClipToMask(context, rect, image.CGImage);
        //CGContextAddRect(context, rect);
    
        //CGContextDrawPath(context,kCGPathFill);
    
        // generate a new UIImage from the graphics context we drew onto
        UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
    
        //return the gradient image
        return coloredImg;
    }
    

    Thread closed.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I ran into a problem. Wrote the following code snippet: teksti = teksti.Trim() teksti
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I want to count how many characters a certain string has in PHP, but
I have a French site that I want to parse, but am running into
I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
We're building an app, our first using Rails 3, and we're having to build
I have this code: - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { NSString *someString = [[NSString
I'm making a simple page using Google Maps API 3. My first. One marker
Seemingly simple, but I cannot find anything relevant on the web. What is the
Does anyone know how can I replace this 2 symbol below from the string

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.