gpt4 book ai didi

ios7 - 显示/隐藏 UIToolbar, "match finger movement",例如 iOS7 Safari

转载 作者:行者123 更新时间:2023-12-04 02:07:37 26 4
gpt4 key购买 nike

注意:在此处查看 Thuy 的 UINavBar 优秀子类:
https://stackoverflow.com/a/20720359/294884
如果您正在解决这个问题,GTScrollNavigationBar 已经接近于导航栏问题的现成解决方案!
例如:在 2014 年的 iPhone 上,打开 Safari,加载任何网页。
查看底部的 iOS 工具栏。
现在上下移动你的手指 只有几个像素 .
enter image description here
基本上是底部的工具栏,用手指移动 .此外,工具栏后面滚动页面时出现/消失 ,遵循特定的逻辑。
但是交互规则是非常复杂 , 并涉及隐藏期间的手指开/关、距离匹配、页面下方时的手势、非常短页面的特殊情况等。
我要正是复制苹果的行为。
(我们应该匹配 Apple UX,这似乎是明智的。)
有没有办法做到这一点? Apple 是否为此提供了一个我不知道的一步命令?或者你必须费力地复制这个概念?
谢谢。
顺便说一句,下面的逻辑是可靠的,会大致重复 苹果的做法是:

-(void)feedIsScrolled:(CGFloat)scrollNewOverallYPosition
{
// call this routine when scrollViewDidScroll:

self.feedIsScrolledDelta =
scrollNewOverallYPosition - self.feedIsScrolledPrevious;
self.feedIsScrolledPrevious =
scrollNewOverallYPosition;

// nb, you do those only in this routine, NOT the following routine.

if ( scrollNewOverallYPosition < 15.0 )
{
.. animate in the bar
return;
}

if ( self.feedIsScrolledDelta > 0.0 )
.. animate away the bar
}

-(void)feedIsThrown:(CGFloat)scrollNewOverallYPosition
{
// call this routine when scrollViewDidEndDragging:
// BUT ONLY when willDecelerate: is true

if ( self.feedIsScrolledDelta <= 0.0 )
.. animate in the bar
else
.. animate away the bar
}
顺便说一句,当然你可以使用
(void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated
上下滑动 UIToolbar。但是这对“手指匹配”没有任何帮助。
注意:例如,这里是在 SO 上看到的一个极好的解决方案:
https://stackoverflow.com/a/21049991/294884
您可以这样编程,实现 Apple 示例中的每一条规则,以适应您在每一点上的口味。 (当你接近底部时该怎么做,手指向上,哪个方向等等)我的观点是我只是假设有人必须已经完成了 的所有工作。与 Apple UX 完全匹配 ——呵!

最佳答案

没有开源可以做到这一点,但我不认为它很难实现。像 Safari 一样拥有精确的 1:1 行为可能有些困难,但仍然可以做到。

MobileSafar 可以附加到调试器中,并使用断点和 Objective C 运行时进行调试和逆向工程。

例如,您没有使用工具栏和导航栏的两个假设是不正确的。

这是滚动前的 View 层次结构:

http://pastebin.com/aRXr7b5Z

滚动后:

http://pastebin.com/CasBNuxq

如您所见,条形图已从其正常位置移开。

打破上 -[BrowserToolbar setFrame:] ,这是堆栈跟踪:

* thread #1: tid = 0x2332c, 0x000000010003fa70 MobileSafari`___lldb_unnamed_function1519$$MobileSafari, queue = 'com.apple.main-thread', stop reason = breakpoint 8.1
* frame #0: 0x000000010003fa70 MobileSafari`___lldb_unnamed_function1519$$MobileSafari
frame #1: 0x0000000100023e51 MobileSafari`___lldb_unnamed_function825$$MobileSafari + 1338
frame #2: 0x00000001000268da MobileSafari`___lldb_unnamed_function871$$MobileSafari + 55
frame #3: 0x000000010009856a MobileSafari`___lldb_unnamed_function3864$$MobileSafari + 388
frame #4: 0x0000000100098996 MobileSafari`___lldb_unnamed_function3871$$MobileSafari + 154
frame #5: 0x000000010002ba89 MobileSafari`___lldb_unnamed_function990$$MobileSafari + 209
frame #6: 0x0000000102396a8c UIKit`-[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 55
frame #7: 0x000000010238692b UIKit`-[UIScrollView setContentOffset:] + 628
frame #8: 0x000000010238ab00 UIKit`-[UIScrollView _updatePanGesture] + 1989
frame #9: 0x0000000102644002 UIKit`_UIGestureRecognizerSendActions + 188
frame #10: 0x0000000102642f68 UIKit`-[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 357
frame #11: 0x0000000102647319 UIKit`___UIGestureRecognizerUpdate_block_invoke + 53
frame #12: 0x00000001026472a1 UIKit`_UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 257
frame #13: 0x000000010263f377 UIKit`_UIGestureRecognizerUpdate + 93
frame #14: 0x0000000102353e55 UIKit`-[UIWindow _sendGesturesForEvent:] + 928
frame #15: 0x0000000102354b14 UIKit`-[UIWindow sendEvent:] + 909
frame #16: 0x000000010232c6da UIKit`-[UIApplication sendEvent:] + 211
frame #17: 0x0000000102319f2d UIKit`_UIApplicationHandleEventQueue + 9579
frame #18: 0x0000000100573f21 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
frame #19: 0x00000001005737f2 CoreFoundation`__CFRunLoopDoSources0 + 242
frame #20: 0x000000010058f66f CoreFoundation`__CFRunLoopRun + 767
frame #21: 0x000000010058ef83 CoreFoundation`CFRunLoopRunSpecific + 467
frame #22: 0x00000001011a0f04 GraphicsServices`GSEventRunModal + 161
frame #23: 0x000000010231c273 UIKit`UIApplicationMain + 1010
frame #24: 0x00000001000518d2 MobileSafari`___lldb_unnamed_function1998$$MobileSafari + 1558

所以这一切都发生在滚动通知之后。

我在 MobileSafari'___lldb_unnamed_function990$$MobileSafari 上设置了一个断点并获得 self可变,打印 po $arg1 .这是所有魔法发生的地方:

http://pastebin.com/kjAXKKTW

如果您真的对 1:1 复制感兴趣,您可以在这些方法上放置断点并进行调查。祝你好运!

关于ios7 - 显示/隐藏 UIToolbar, "match finger movement",例如 iOS7 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com