I'm having a bit of trouble updating my UIImageView to contain subviews of buttons after I'm getting the CGPoint data from another class. In my main VC, I've got an ImageView set as a subview to a UIScrollView that is a subview of the main ViewControllers view.
In viewDidLoad, I'm calling a method from an NSObject class to get the data for all the button locations from my database:
- (void)parseCoordinateData:(NSArray*)data {
NSLog(@"Processing Data");
mapVC = [[ViewController alloc]init];
for(NSArray *table in data) {
NSLog(@"Table: %@", table);
float xValue = [[NSString stringWithFormat:@"%@", [table[0]objectForKey:@"LocationX"]] floatValue];
float yValue = [[NSString stringWithFormat:@"%@", [table[0]objectForKey:@"LocationY"]] floatValue];
NSLog(@"Coordinates: (%f,%f)", xValue, yValue);
CGPoint buttonCoordinate = CGPointMake(xValue, yValue);
[mapVC placeButtonsFromDatabaseWithCoordinates:buttonCoordinate];
}
}
And in the method from the main VC where I'm placing the buttons:
- (void)placeButtonsFromDatabaseWithCoordinates:(CGPoint)point {
NSLog(@"Placing Button at point: %@", NSStringFromCGPoint(point));
UIButton *button = [[UIButton alloc] init];
[self.imageView addSubview:button];
button.frame = (CGRect){.origin = point, .size = CGSizeMake(20.0, 20.0)};
button.backgroundColor = [UIColor greenColor];
button.layer.cornerRadius = 10;
button.clipsToBounds = YES;
button.userInteractionEnabled = YES;
[self animateButton:button];
[self.imageView bringSubviewToFront:button];
}
But the buttons are not appearing on the image view. Any idea how to get this to work?
EDIT
I've created a very small project to try and replicate this problem. I've created a view controller that calls to an NSObject class that will call back to the View Controller to draw a subview. I am getting an EXC BAD ACCESS error when attempting this.
However, if handling the call explicitly in the main thread, the app will not crash but the view will not draw.
I think this is what's happening when trying to add the button to the image as a subview.
Change
to