Wasim
Wasim

Reputation: 5113

Center UIActivityIndicatorView in a UIImageView

I've created a custom subclass of UIImageView and in one method I want to add an activity indicator to the center while the image is loading. I'm using the following code, but the activity monitor is positioned well outside of the UIImageView. What can I do to center it exactly within the bounds of the UIImageView?

UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

indicator.autoresizingMask =
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleLeftMargin;

indicator.center = self.center;

[self addSubview:indicator];    
[indicator startAnimating];

Upvotes: 5

Views: 6941

Answers (3)

Oleg Trakhman
Oleg Trakhman

Reputation: 2082

indicator.center = [self convertPoint:self.center fromView:[self superview]];

You only need to convert point because of this (UIView Class Reference):

@property(nonatomic) CGPoint center Discussion

The center is specified within the coordinate system of its superview and is measured in points.

Upvotes: 3

Vladimir
Vladimir

Reputation: 170859

center property is view's coordinates in coordinate space of its superview. So you need to set coordinates of your indicator in the coordinate space of imageView. Correct way will be:

indicator.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));

Upvotes: 15

Fran Sevillano
Fran Sevillano

Reputation: 8163

indicator.center = imageView.center;

Upvotes: 2

Related Questions