кнопка iPhone с непрямоугольной фигурой?

Можно возвратить EmptyResult, если Вы хотите, чтобы он ничего не сделал...

return new EmptyResult();

при использовании AjaxHelper, можно избежать обновления путем предоставления неудачного кода состояния (например, 404 или независимо от того, что является самым соответствующим), это остановит его заменяющий отделение, поскольку JavaScript в MicrosoftMvcAjax.js явно проверяет на успешный ответ прежде, чем обновить любой elements:-

this.ControllerContext.HttpContext.Response.StatusCode = 404;
return new EmptyResult();

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

5
задан powtac 13 October 2009 в 17:10
поделиться

5 ответов

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

Мне нужно было сделать это не так давно, и я сделал то, что только что предложил Сикстен Отто. В моем исходном вопросе (раздел «ОБНОВЛЕНИЕ») есть несколько подсказок для получения альфа-значения для вашего изображения в определенный момент:

Как создать прозрачное окно с непрямоугольными кнопками?

Редактировать: Я предлагаю создать подкласс UIControl в приведенном ниже примере, но если вам не нужно какое-либо особое поведение на вашей кнопке, кроме ее «непрямоугольности», тогда просто подклассификация UIButton без полей, настроенная с вашим PNG, сделает эту работу и потребует меньше работы . У вас больше контроля над контролем » s, создав подкласс UIControl и сделав это «сложным путем».

Я бы посоветовал вам создать подкласс UIControl и переопределить методы событий касания, а затем проверить альфа-канал под нажатой точкой и не обрабатывать событие, если альфа == 0 . Для рисования вы переопределяете drawRect: и используете NSImage метод drawInRect: fromRec: operation: дробь: для рисования изображения в рамке элемента управления.

Сначала вам нужно загрузить изображение и получить его растровое представление:

buttonImage = [NSImage imageNamed:@"myButtonImage"];
buttonImageRep = [[buttonImage representations] objectAtIndex:0];

Затем вы можете нарисовать его в представлении элемента управления: (где stateImage - это указатель на изображение, которое должно быть нарисовано в зависимости от того, находится ли кнопка нажата или нет)

- (void)drawRect:(NSRect)aRect {
 [stateImage drawInRect:[self bounds] fromRect:NSMakeRect(0.0,0.0,[buttonImage size].width,[buttonImage size].height)
      operation:NSCompositeSourceOver fraction:1.0];
}

На этом этапе вы нарисовали кнопку с изображением PNG. Вы можете переопределить методы события касания и обработать событие, если альфа не равна 0:

NSColor *colorUnderMouse = [buttonImageRep colorAtX:mouse.x y:mouse.y];
float alpha = [colorUnderMouse alphaComponent];

Это то, что я сделал, и это прекрасно работает. Надеюсь, это поможет!

NB: Мой пример предназначен для Mac, но он также должен работать на iPhone, возможно, с некоторыми небольшими изменениями.

8
ответ дан 18 December 2019 в 06:35
поделиться

Как Гуванте говорит , на самом деле не стоит полагаться на точные прикосновения. Apple, например, рекомендует, чтобы элементы управления имели размер не менее 44 пикселей по .

Я бы рекомендовал использовать UIButton типа UIButtonTypeCustom , установите изображение кнопки в свой PNG и зарегистрируйтесь для событий касания ( подробнее об обработке событий см. здесь). Затем в своем методе действия вы можете получить координаты касания из события и проверить эти координаты по альфа-каналу вашего изображения, чтобы увидеть, следует ли рассматривать его как "

2
ответ дан 18 December 2019 в 06:35
поделиться

Похоже, вы хотите, чтобы область нажатия кнопки точно соответствовала используемому PNG.

. Если это то, что вы ищете, я бы во-первых посоветовал этого не делать. На iPhone нажимают пальцем, который, как правило, не способен отличить такой маленький участок. Осознавая часть вашего первоначального вопроса, я заметил, что вы упомянули, что хотите обрабатывать функцию автоматически на основе альфа-канала. Хотя я бы порекомендовал свой метод ограничения областей, теоретически вы могли бы достичь этого путем выборки PNG для проверки альфа-канала со значением, смещенным относительно начала координат кнопки. Потенциально даже делать это в случае нажатия обычной кнопки.

7
ответ дан 18 December 2019 в 06:35
поделиться

Другой вариант - разделить кнопку на несколько прямоугольных частей.

1
ответ дан 18 December 2019 в 06:35
поделиться

Rectangular buttons are a button type, you can use the custom button type and assign an image to get rid of the rectangular edges of the button...heres a reference to button types http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/doc/c_ref/UIButtonType and to UIButton http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html

5
ответ дан 18 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: