Как заставить суперпредставление прервать сенсорные события кнопки?

Существует несколько причин, почему Фортран мог быть быстрее. Однако сумма, они имеют значение, так несущественна или может работаться вокруг так или иначе, что она не должна иметь значения. Главная причина использовать Фортран в наше время поддерживает или расширяет унаследованные приложения.

  • ЧИСТЫЕ и ЭЛЕМЕНТНЫЕ ключевые слова на функциях. Это функции, которые не имеют никаких побочных эффектов. Это позволяет оптимизацию в определенных случаях, где компилятор знает, что та же функция будет вызвана с теми же значениями. Примечание: реализации GCC, "чистые" как расширение языка. Другие компиляторы могут также. Межмодульный анализ может также выполнить эту оптимизацию, но это трудно.

  • стандартный набор функций, которые имеют дело с массивами, не отдельными элементами. Материал как sin(), журнал (), sqrt () берут массивы вместо скаляров. Это помогает оптимизировать стандартную программу. Автовекторизация приносит ту же пользу в большинстве случаев, если эти функции являются подставляемыми или builtins

  • Встроенный составной тип. В теории это могло позволить компилятору переупорядочивать или устранять определенные инструкции в определенных случаях, но вероятно Вы будете видеть то же преимущество со структурой {двойное ре, я;}; идиома используется в C. Это делает для более быстрой разработки, хотя, поскольку операторы работают над составными типами в Фортране.

6
задан Michael 15 August 2009 в 15:37
поделиться

4 ответа

Спасибо за предложения и информативные ответы. В итоге я просто использовал объяснение, показанное на этой странице: (в разделе «Уловка 1: приложение« Эмуляция смахивания / масштабирования / прокрутки фотографий с помощью одного UIScrollView »»).

1
ответ дан 8 December 2019 в 04:54
поделиться

Мне было бы интересно увидеть другие решения, но самый простой способ, который я знаю, - переопределить любой из этих двух методов UIView:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

Эти методы вызываются, чтобы определить, является ли прикосновение в пределах представления или любого из его подвидов , так что это хорошая точка, чтобы перехватить касание и затем передать его. Просто делайте, что хотите, а затем

return [super hitTest:point withEvent:event];

или

return [super pointInside:point withEvent:event];
16
ответ дан 8 December 2019 в 04:54
поделиться

Я считаю, что в этом случае вам придется создать подкласс UIButton и переопределить ответы на события касания и движения UIResponder. Затем вы можете перенаправить их на любой объект, который вы хотели бы предположить, что подкласс UIButton сможет добраться до него.

В этом случае вы должны передать их супервизору UIButton.

@interface MyButton : UIButton
@end

@implementation MyButton

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
     [[self superview] touchesMoved:touches withEvent:event];
}

@end

См. документацию UIResponder

0
ответ дан 8 December 2019 в 04:54
поделиться

Инстинкт сказал бы «подкласс UIButton», но UIButton на самом деле является кластером классов (т. Е. Фактический тип объекта прозрачно изменяется в зависимости от того, какую кнопку вы хотите сделать), что делает его в высшей степени трудно подклассифицировать. Если не считать переписывания UIButton, с этим подходом мало что можно сделать.

Когда мне нужно было решить почти идентичную проблему, я придумал представление, которое использует композицию для отображения прокси-интерфейса UIView, но все же позволяет перехват касаний. Вот как это работает:

@interface MyView : UIView {
  UIView * visibleView;
}

- (id) initWithFrame:(CGRect)frame controlClass:(Class)class;

@end


@implementation MyView

- (id) initWithFrame:(CGRect)frame controlClass:(Class)class {
  if (self = [super initWithFrame:frame]) {
    CGRect visibleViewFrame = frame;
    visibleViewFrame.origin = CGPointZero;
    visibleView = [[class alloc] initWithFrame:visibleViewFrame];
    [visibleView setUserInteractionEnabled:NO];
    [self addSubview:visibleView];

    [self setUserInteractionEnabled:YES];
    [self setBackgroundColor:[UIColor clearColor]];
  }
  return self;
}

- (void) dealloc {
  [visibleView removeFromSuperview];
  [visibleView release], visibleView = nil;
  [super dealloc];
}

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  if (someCondition == YES) {
    [visibleView touchesBegan:touches withEvent:event];
  }
}

//and similar methods for touchesMoved:, touchesEnded:, etc

@end

Основная идея заключается в том, что вы встраиваете кнопку (или что-то еще) в класс контейнера (аналогично тому, что вы описали в своем вопросе). Однако вы отключаете взаимодействие с кнопкой, а это означает, что, когда пользователь нажимает кнопку, событие касания «проваливается». кнопку и в кнопки, содержащие супервизор (в данном случае ваш экземпляр MyView). Оттуда вы можете соответствующим образом обработать касание. Если вы хотите, чтобы кнопка «реагировала» на прикосновение, просто позвольте кнопке сделать это, отправив соответствующее сообщение UIResponder. (Впрочем, вам может потребоваться повторно включить userInteractionEnabled в visibleView. Я не уверен в этом.)

Как я уже говорил выше, я использовал этот подход (не эту точную реализацию, но этот шаблон) довольно успешно, когда мне нужно было иметь кнопку на интерфейсе, но также захватить сам объект UITouch.

просто позвольте кнопке сделать это, отправив соответствующее сообщение UIResponder. (Впрочем, вам может потребоваться повторно включить userInteractionEnabled в visibleView. Я не уверен в этом.)

Как я уже говорил выше, я использовал этот подход (не эту точную реализацию, но этот шаблон) довольно успешно, когда мне нужно было иметь кнопку на интерфейсе, но также захватить сам объект UITouch.

просто позвольте кнопке сделать это, отправив соответствующее сообщение UIResponder. (Впрочем, вам может потребоваться повторно включить userInteractionEnabled в visibleView. Я не уверен в этом.)

Как я уже говорил выше, я использовал этот подход (не эту точную реализацию, но этот шаблон) довольно успешно, когда мне нужно было иметь кнопку на интерфейсе, но также захватить сам объект UITouch.

4
ответ дан 8 December 2019 в 04:54
поделиться