- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的练习应用程序中实现与 Snapchat 非常相似的功能,您可以在其中将 UITableViewCell
拖动到右侧或左侧,并且在拖动时,图像后面 View 会慢慢出现,直到它到达某个点,到达某个点后,它会启动一个 segue 或 PageViewController
类型 segue 到另一个 View Controller ,您可以用来与 friend 聊天。
起初,我尝试使用屏幕边缘平移手势识别器,但只有当您从屏幕边缘开始滑动时才有效。我需要能够从 UITableViewCell
中的任何位置滑动。
在 Snapchat 中演示了我需要的功能,当你在你 friend 的一个表格单元格上慢慢向右滑动时,你会更清楚地看到它,它会慢慢显示消息图标的图像,并最终导致你可以看到的另一个 View 聊天。
那么平移手势识别器就足够了吗?如果是这样,完成这项工作的最佳方法是什么?我看过有关平移手势识别器的教程,但我看不出在滑动一定距离后它最终如何导致另一个 View Controller 。我认为我可以将消息传递图标放在向右滑动时可能出现的显示的表格单元格内容后面,但我如何才能实现如此流畅的功能?
了解这一点确实会增加我在流畅的用户体验方面的体验。任何建议或方法将不胜感激,谢谢。
编辑:请在 objective-c 中留下答案。我不懂 swift 。
最佳答案
您可以为此创建自定义 TableViewCell。下面的代码应该可以满足您的要求。只需要将委托(delegate)添加到您的 ViewController
protocol TableViewCellDelegate {
func something()
}
class TableViewCell: UITableViewCell {
var startSegue = false
var label: UILabel // Or UIView, whatever you want to show
var delegate: TableViewCellDelegate? // Delegate to your ViewController to perform the segue
required init(coder aDecoder: NSCoder) {
fatalError("NSCoding not supported")
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
// Utility method for creating the label / view
func createLabel() -> UILabel {
let label = UILabel(frame: CGRect.nullRect)
// Add label customization here
return label
}
// Create "check" & "cross" labels for context cues
label = createLabel() // Create the label
label.text = "\u{2713}" // Add check symbol as text
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubview(label)
// Add a pan recognizer
var recognizer = UIPanGestureRecognizer(target: self, action: "handleSwipe:")
recognizer.delegate = self
addGestureRecognizer(recognizer)
}
let cueMargin: CGFloat = 10.0, cueWidth: CGFloat = 50.0
override func layoutSubviews() {
// The label starts out of view
label.frame = CGRect(x: bounds.size.width + cueMargin, y: 0, width: cueWidth, height: bounds.size.height)
}
func handleSwipe(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self)
if recognizer.state == .Changed {
center = CGPointMake(center.x + translation.x, center.y)
startSegue = frame.origin.x < -frame.size.width / 2.0 // If swiped over 50%, return true
label.textColor = startSegue ? UIColor.redColor() : UIColor.whiteColor() // If swiped over 50%, become red
recognizer.setTranslation(CGPointZero, inView: self)
}
if recognizer.state == .Ended {
let originalFrame = CGRect(x: 0, y: frame.origin.y, width: bounds.size.width, height: bounds.size.height)
if delegate != nil {
startSegue ? delegate!.something() : UIView.animateWithDuration(0.2) { self.frame = originalFrame }
}
}
}
// Need this to handle the conflict between vertical swipes of tableviewgesture and pangesture
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
let velocity = panGestureRecognizer.velocityInView(superview!)
if fabs(velocity.x) >= fabs(velocity.y) { return true }
return false
}
return false
}
}
我从这个 tutorial 得到这个
编辑:在您的 ViewController 中,您必须使用以下方法“注册”此 TableViewCell:
yourTableName.registerClass(TableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
cellForRowAtIndexPath
的 TableViewDataSource
看起来像:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as TableViewCell
cell.delegate = self
// Add stuff for your other labels like:
// "cell.name = item.name" etc
return cell
}
如果您想将数据传回ViewController
,只需使用委托(delegate)即可。
关于iOS - 类似于 Snapchat 的 UITableViewCell 中的 UIGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406081/
在创建 shapchat ( https://www.snapchat.com/ ) 用户名时,我一直无法找到允许的字符。这里有人可以分享他们关于这方面的知识吗? 上下文:我正在创建一个用户名验证
按照 snapkit 登录文档 (WEB),我实现了服务器端代码并能够为用户获取访问 token (第 2.5 节 https://docs.snapchat.com/docs/tutorials
我正在开发一个网站。我在基于 php、html 的网站上添加了许多社交登录或共享按钮、链接,例如 facebook、tweeter、gplus、pintrest。现在我必须为 snapchat 添加社
我想知道是否有一种方法可以编写允许 PBJVision 在用户在后台播放自己的音乐时录制视频的功能。 最佳答案 AVAudioSession.sharedInstance().setCategory(
我正在开发一个 iOS 应用程序,用户可以发布该应用程序然后接收他们的快照。我已经看到用 "SnapHack" 完成了此操作但 SnapChat 本身并没有允许你做这些事情的 API。那么有人可以引导
SnapChat 如何将图像调整为如此小的文件大小,同时仍保持良好的质量?我的图像为后置摄像头节省了大约 90KB,为前置摄像头节省了 45KB。我在网上看到发送一个快照大约是 15kb。如何更好地优
我无法理解如何着手创建向下滑动手势来关闭覆盖层,该覆盖层是另一个具有自己的对象和图像的屏幕,然后能够滑动回到原始屏幕。 我目前有一个包含 3 个屏幕的 ScrollView 。一个 |乙 | C 和我
我正在开发一个 iOS 应用程序,用户可以在上传图像(如 Snapchat)时添加描述/文本。 他们是渲染图像并将文本添加到图像中,以便它成为图像本身的一部分,还是显示为图像上的 UILabel? 对
我很想知道 SnapChat 如何将数据发送到其他移动设备。例如,它是将数据发送到服务器然后将其存储以供下载,还是通过内置 ios 功能将数据直接发送到设备? 我对在设备之间发送数据的整个过程很感兴趣
我想在不同大小的视频上添加全屏叠加图像, 如果叠加层和视频具有相同的比例(相同的宽度和高度),我使用 ffmpeg 它可以正常工作。 如果视频高度和宽度尺寸小于叠加图像,则叠加图像被挤压,但我想像快照
我正在 android 和 ios 上构建一个应用程序,并且要求用户输入他们的 Snapchat 帐户。我不希望人们添加虚假的 Snapchat 帐户,所以我到处搜索但找不到方法。 我只找到了这个答案
我似乎无法理解一个好的设计,它允许用户创建一个对象,保存到数据库并跟踪该对象是否发布到服务器。 就像在 snapchat 中一样 - 离线时,您可以创建一个包含图片和接收者的快照对象,按发送,它会显示
因此,我们的想法是像 Snapchat 一样向用户提供某种通知(不必是标准的 Android 通知,可以是库或自定义通知)。也就是说,它出现在应用程序中,然后消失,不会出现在状态栏或通知抽屉中。有没有
我正在尝试在我的项目中实现 Snapchat 登录按钮。我已经下载了 SDK,创建了 Snapchat 开发者帐户,并在 info.plist 中编写了一些代码。 现在我可以登录 Snapchat 帐
我想像在 snapchat 中一样使用视频过滤器创建 android 应用程序。问题是我在 IOS 中找不到像 SCRecorder 这样的库,我已经在应用程序中添加了 FFmpeg 但即使使用 ff
我正在创建一个类似于 snapchat 的相机胶卷功能,其中相机位于底层,然后在点击一个按钮后相机胶卷出现。相机胶卷不会占据整个屏幕顶部的搜索栏仍然保留,并且在用向下滑动手势关闭时相机仍在运行。我不确
Snapchat 是如何把这个导航栏做成渐变背景和圆角的。谢谢! 我没有足够大的声誉来发布图片,但它是向人们展示你的 snapchat 的 View ,一直到左边。 func application(
在 snapchat 的登录页面上,按钮出现在键盘的顶部,我可以这样做,但由于 6plus 有不同尺寸的键盘,它把它的一部分切掉了。 我在垂直堆栈 View 中有两个文本字段和两个按钮,我希望垂直堆栈
我无法弄清楚如何将视频从 SnapChat 分享到我的应用程序,而 WhatsApp 可以毫无问题地做到这一点,所以这是可能的。 由于 SnapChat 与 contentprovider 一起使用,
在Shapchat的照片编辑器中,有一个带有引导线的剪刀工具提取对象(通过绘制要提取的对象的边缘)。 我想用 openCV 实现该工具,但我对 openCV 完全陌生。我搜索了openCV文档和教程,
我是一名优秀的程序员,十分优秀!