图像附在下面。基本上它是流行的照片编辑应用程序Snapseed。当您在正在编辑的图像上触摸拖动时,视图中的表格将动画显示在图像顶部的可见性及其选项,如下图所示。最重要的一点是它从屏幕上移开手指时消失了,你可以通过在触摸拖动图像后立即继续向上或向下触摸拖动,从该表中的下面5个选项之一中进行选择使菜单出现。选择完成后,它会将选择传递回父级并消失。关于如何做到这一点的任何想法?
答案 0 :(得分:2)
带有按钮的视图可能是隐藏的,直到带有图像的视图检测到触摸,然后它执行 touchesBegan:withEvent:方法,该方法是UIResponder类的一部分。大多数视图都是UIResponder的子类,因此这是一个内置方法,以及 touchesEnded:withEvent:。当touchesEnded:withEvent:执行时,按钮视图被解除。 (它要么立即隐藏,要么动画阿尔法值直到消失。)
更多信息
以下是Keith Lazuka的kal Calendar中的一些代码。此代码查看触摸结束的位置,以确定日历上的“图块”被击中。我想这里可以使用相同的东西来确定你的例子中选择了哪个“按钮”。
- (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的东西)。一旦知道识别出哪个视图,就可以编写代码以执行所需的操作。
答案 1 :(得分:0)
它可以是一个简单的UIView,作为子视图添加,用bringSubviewToFront显示。当菜单显示时再次点击图像会发生什么?