Я ищу какой-то метод делегата, который будет запущен, когда под просмотр будет добавлено в представление. Мне нужно это, потому что представление компаса на карте iOS7 добавляется в mapview, когда оно начинает вращаться (оно не было ранее и не скрыто). Однако, когда я пытаюсь манипулировать видом компаса в regionWillChangeAnimated
, он не запускается, пока пользователь не отпустит карту.Ищете метод делегата subviewsDidChange
В основном мне нужно что-нибудь по строкам: subviewWasAdded
, subviewsDidChange
, или что-то в этом роде.
EDIT: После принятия предложения Daij-Djan я сделал MPOMapView.m и MPOMapView.
#import "MPOMapView.h"
@implementation MPOMapView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)addSubview:(UIView *)view {
[super addSubview:view];
[self moveCompass:&view];
}
- (void)moveCompass:(UIView **)view {
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
return;
}
if(![*view isKindOfClass:NSClassFromString(@"MKCompassView")]) {
return;
}
//Gets here
NSLog(@"Was the compass");
float width = (*view).frame.size.width;
float height = (*view).frame.size.height;
(*view).frame = CGRectMake(40, self.frame.size.height - 50, width, height);
//Frame doesn't change
NSLog(@"Frame should change");
}
@end
Метод вызывается, но рамка не изменяется. Я также пробовал:
- (void)addSubview:(UIView *)view {
[super addSubview:view];
[self moveCompass:view];
}
- (void)moveCompass:(UIView *)view {
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
return;
}
if(![view isKindOfClass:NSClassFromString(@"MKCompassView")]) {
return;
}
//Gets here
NSLog(@"Was the compass");
float width = view.frame.size.width;
float height = view.frame.size.height;
view.frame = CGRectMake(40, self.frame.size.height - 50, width, height);
//Frame doesn't change
NSLog(@"Frame should change");
}
, но это тоже не сработает. И, наконец ....
- (void)addSubview:(UIView *)view {
[super addSubview:[self movedCompass:view]];
}
- (UIView *)movedCompass:(UIView *)view {
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
return view;
}
if(![view isKindOfClass:NSClassFromString(@"MKCompassView")]) {
return view;
}
//Gets here
NSLog(@"Was the compass");
float width = view.frame.size.width;
float height = view.frame.size.height;
view.frame = CGRectMake(40, self.frame.size.height - 50, width, height);
//Frame doesn't change
NSLog(@"Frame should change");
return view;
}
не работает либо
@Mike_V вам удалось получить ваше приложение принято с вашим кодом доступ частному классу MKCompassView таким образом? Мне нужно сделать то же самое для публичного приложения. – pnizzle