Как этот взгляд и контроль были сделаны? - PullRequest
1 голос
/ 27 сентября 2011

Изображение прикреплено ниже.В основном это популярное приложение для редактирования фотографий Snapseed.При касании перетаскиванием изображения, которое редактируется, таблица, подобная представлению, оживляет видимость сверху изображения с его параметрами, как показано ниже на изображении.Самая важная часть состоит в том, что он исчезает при удалении пальца с экрана, и вы выполняете выбор из одного из 5 вариантов ниже в этом виде таблицы, продолжая касаться перетаскиванием в направлении вверх или вниз сразу после касания, перетаскивая изображение насделать меню появитьсяКак только выбор сделан, он передает выбор родителю и исчезает.Любые идеи о том, как это могло быть сделано?

enter image description here

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вид с кнопками, вероятно, будет скрыт до тех пор, пока вид с изображением не обнаружит касание, после чего он выполняет метод touchesBegan: withEvent: , который является частью класса UIResponder.Большинство представлений подкласса UIResponder, так что это встроенный метод вместе с touchesEnded: withEvent: .Когда touchesEnded: withEvent: выполняется, вид кнопки отклоняется.(Он либо сразу скрывается, либо анимирует альфа-значение до тех пор, пока не исчезнет.)


Дополнительная информация

Вот код из Кал-Календаря Кейта Лазуки.Этот код просматривает позицию, в которой касание закончилось, чтобы определить, на какую «плитку» в календаре попадет.Я предполагаю, что то же самое можно использовать здесь, чтобы определить, какая «кнопка» выбрана в вашем примере.

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


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

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 {
 UITouch *touch = [touches anyObject];
 CGPoint location = [touch locationInView:self];
 UIView *hitView = [self hitTest:location withEvent:event];

 //[self receivedTouches:touches withEvent:event];

 if ([hitView isKindOfClass:[KalTileView class]]) {
 KalTileView *tile = (KalTileView*)hitView;

 if (tile.belongsToAdjacentMonth) {
 if ([tile.date compare:[KalDate dateFromNSDate:logic.baseDate]] == NSOrderedDescending) {
 [delegate showFollowingMonth];
 } else {
 [delegate showPreviousMonth];
 }
 self.selectedTile = [frontMonthView tileForDate:tile.date];
 } else {
 //self.selectedTile = tile;
 }
 }
 self.highlightedTile = nil;
 }

Ключ к этому находится в первых трех строках кода в методе touchesEnded.

hitTest: withEvent: это метод экземпляра UIView, который сообщает вам, какой вид был поражен при возникновении события touchesEnded, исходя из местоположения точки, в которой произошли касания.

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

0 голосов
/ 27 сентября 2011

Это может быть простой UIView, добавленный в качестве подпредставления, показанного с помощью метода acceptSubviewToFront. Что происходит при повторном нажатии на изображение во время отображения меню?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...