У меня открыто 30-40 вкладок, я нашел ответ ... но я хочу улучшить.
Код работает, я просто не уверен, что он эффективен
Следующий код показывает, что у меня есть 2 небольших изображения (одно с использованием UIImageView, другое с использованием UIView), в котором я подключен к UIScrollView, который присоединен к UIView, который поставляется с UIViewController, который присоединен к UIWindow. Довольно простой.
У меня также есть кнопка, прикрепленная к UIViewController, чтобы убедиться, что масштабирование и прокрутка работают. (Путем проверки статического расположения кнопки и размера)
@interface Wire_TestViewController : UIViewController <UIScrollViewDelegate> {
UIScrollView *scrollview;
}
@end
Реализация:
- (void)test:(UIButton *)sender { }
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return scrollview; }
- (void)viewDidLoad {
[super viewDidLoad];
scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollview.delegate = self;
scrollview.contentSize = CGSizeMake( 320*2, 480*2 );
scrollview.minimumZoomScale = .1;
scrollview.maximumZoomScale = 10;
[self.view addSubview:scrollview];
UIImageView *view = [[UIImageView alloc] initWithFrame:CGRectMake(320, 320, 20, 20)];
view.image = [UIImage imageNamed:@"Node.png"];
view.clearsContextBeforeDrawing = NO;
[scrollview addSubview:view];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(10, 10, 100, 30);
button.tag = 51;
[button setTitle:@"new button" forState:(UIControlState)UIControlStateNormal];
[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 30, 30)];
view2.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"WireActive.png"]];
[scrollview addSubview:view2];
TestSubclass *test = [[TestSubclass alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
test.userInteractionEnabled = TRUE;
test.image = [UIImage imageNamed:@"Node.png"];
[scrollview addSubview:test];
}
Внизу вы увидите, что у меня есть класс TestSubclass.
Код для этого выглядит следующим образом:
@interface TestSubclass : UIImageView { }
@end
@implementation TestSubclass
- (id)init {
[super init];
self.userInteractionEnabled = TRUE;
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
printf("Being touched...\n");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
printf("Touches Ended...\n");
}
@end
Часть, в которой я доволен, заключается в том, что у меня есть полностью функционирующий подкласс UIImageView, который работает так, как если бы это был UIButton.
НО! без 7 backgroundImageViews (и накладных расходов от каждого из них), без 6 меток (и накладных расходов от каждого из них), без 6 UIImageViews ("...") и, наконец, количество ненужных вещей, которые UIButton предлагает. Я только хотел возможности касания .. эффективно однако. (TouchUpInside, перетаскивание и т. Д.)
Но теперь, во время моего исследования (после обширного тестирования, чтобы выполнить это много), я наткнулся на документацию и некоторые примеры addGestureRecognizer в UIView. Кажется, что-то вроде, но не совсем эффективно для моих нужд.
Я ищу совет, я знаю, что в моем коде есть пара проблем (переопределена init, но не использовала ее в приведенном выше коде .. не выпустила .. возможно, некоторые ошибки подкласса (плохо знакомы с subClassing) (честно говоря). Но все очень ценится !! И, надеюсь, другим тоже помогут!