обнаружение прикосновения к движению внутри подпредставления - PullRequest
3 голосов
/ 12 марта 2012

Я пытаюсь обнаружить прикосновения внутри подпредставления

В моем главном контроллере представления я добавляю подпредставление под названием: SideBarForCategory, оно занимает 30% экрана слева - в качестве боковой панели.

SideBarForCategory *sideBarForCategory = [[SideBarForCategory alloc] initWithNibName:@"SideBarForCategory" bundle:nil];  
[sideBarData addSubview:sideBarForCategory.view];

внутри SideBarForCategory, я хотел бы проверить на прикосновения

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event touchesForView:self.view] anyObject];

    CGPoint location = [touch locationInView:touch.view];
    NSLog(@"Map Touch %f",location.x);

}

Приведенный выше код (touchesMoved) прекрасно работает в главном представлении (viewcontroller), но не работает внутри моего подпредставления (SideBarForCategory) - почему и как это исправить ?

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Два возможных решения, которые я могу придумать:

  1. Либо используйте GestureRecognizer (например, UITapGestureRecognizer, UISwipeGestureRecognizer) и добавьте эти распознаватели в представление SideBarForCategory.

  2. Общая обработка жестов: создайте свой собственный подкласс UIView, например MyView, и добавьте в него эти сенсорные методы. Затем создайте представление SideBarForCategory как экземпляр MyView.

Надеюсь, это сработает:)

Обновлено: Для второго варианта:

#import <UIKit/UIKit.h>

@interface MyView : UIView
@end





@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  // No need to invoke |touchesBegan| on super
  NSLog(@"touchesBegan");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  // invoke |touchesMoved| on super so that scrolling can be handled
  [super touchesMoved:touches withEvent:event];
  NSLog(@"touchesMoved");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  [super touchesEnded:touches withEvent:event];
  NSLog(@"touchesEnded");
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
  /* no state to clean up, so null implementation */
  NSLog(@"touchesCancelled");
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end

Обновление: И затем в вашей реализации класса SideBarCategoryView, внутри loadView ()

self.view = [[MyView alloc] init];
0 голосов
/ 12 марта 2012

проверьте ссылки Apple для пересчета очков. Вы, вероятно, забыли преобразовать точку, относящуюся к вашему подпредставлению. Поэтому он пытается проверить абсолютные координаты точки касания.

Вероятно, вам нужно:

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
...