Reputation: 5113
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
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
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