如何在 Swift 中创建像指南针一样的“滑动视图”?
Posted
技术标签:
【中文标题】如何在 Swift 中创建像指南针一样的“滑动视图”?【英文标题】:How do I create a 'sliding view' like the compass in Swift? 【发布时间】:2014-06-14 20:54:43 【问题描述】:在当前的指南针应用中,您可以在指南针和关卡之间滑动。我将如何在 Swift 中创建相同的效果?好吧,我正在尝试创建一个主要用于学习的应用程序。我想创建一个记事本应用程序,如果向右滑动,则会出现字体选择,如果向左滑动,则会出现以前的笔记列表。到目前为止,这是我的代码
var noteArray: Dictionary<String,String> = [:]
var selectTextView = UIButton()
var selectTextField = UITextField()
var selectString: String = ""
override func viewDidLoad()
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
var widthField = self.view.bounds.size.width - 10
var heightField = self.view.bounds.size.height - 69 - 221 - 38
println(heightField)
println(widthField)
var textFieldString: String! = ""
//Set up resizable Button Image
let buttonImage: UIImage = UIImage(named:"whiteButtonLong")
let buttonImageHighlight: UIImage = UIImage(named:"whiteButtonHighlightLong")
//Set up text field
self.textView = UITextView(frame: CGRectMake(5, 64, widthField, heightField))
self.textView.backgroundColor = UIColor.redColor()
self.view.addSubview(self.textView)
textView.becomeFirstResponder()
//Set up the New button
var newButtonString: String! = "New Note"
var heightButton = 568 - heightField - 1000
var widthButton = (widthField/2) - 2
let floatInt: CInt = 3
let newButton = UIButton(frame: CGRect(x: 5, y: 5, width: widthButton, height: 50))
UIButton.buttonWithType(UIButtonType.System)
newButton.setTitle(newButtonString,forState: UIControlState.Normal)
newButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
newButton.setBackgroundImage(buttonImage, forState: UIControlState.Normal)
newButton.setBackgroundImage(buttonImageHighlight, forState: UIControlState.Highlighted)
/*newButton.backgroundColor = UIColor.cyanColor()
newButton.layer.borderColor = UIColor.blackColor().CGColor
let widthForBorder: CGFloat = 0.5
newButton.layer.borderWidth = widthForBorder*/
newButton.backgroundRectForBounds(CGRectMake(5, 5, widthButton, heightButton))
newButton.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
newButton.layer.cornerRadius = 10
newButton.clipsToBounds = true
self.view.addSubview(newButton)
//Set up select note
let widthSelectField = widthButton - 10
selectTextView = UIButton(frame: (CGRectMake(162, 5, widthButton, 50))) as UIButton
selectTextView.setBackgroundImage(buttonImage, forState: UIControlState.Normal)
selectTextView.setBackgroundImage(buttonImageHighlight, forState: UIControlState.Highlighted)
self.view.addSubview(selectTextView)
selectTextField = UITextField(frame: CGRectMake(170, 22.5, widthSelectField, 15))
selectTextField.keyboardType = UIKeyboardType.NumberPad
//selectTextField.backgroundColor = UIColor.blueColor()
selectTextView.addTarget(self, action: "textViewAction:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(selectTextField)
selectTextField.text = selectString
selectTextField.canBecomeFirstResponder()
selectTextField.textAlignment = NSTextAlignment.Center
selectTextField.placeholder = "Select Note"
//Set up return button
var returnButton: UIButton = UIButton(frame: CGRectMake(120, 315, 80, 30))
returnButton.backgroundColor = UIColor.grayColor()
returnButton.layer.cornerRadius = 10
returnButton.layer.masksToBounds = true
returnButton.layer.borderWidth = 2
returnButton.layer.borderColor = UIColor.blackColor().CGColor
returnButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
returnButton.setTitle("Return", forState: UIControlState.Normal)
returnButton.addTarget(self, action: "returnButtonAction:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(returnButton)
这在 viewDidLoad() 之外
func buttonAction(sender:UIButton!)
var noteArrayPlusOne = String(noteArray.count + 1)
noteArray.updateValue(textView.text, forKey: noteArrayPlusOne)
println(noteArray)
textView.text = ""
func textViewAction(sender: UIButton!)
selectTextField.becomeFirstResponder()
func returnButtonAction(sender: UIButton!)
//println("button was pressed")
selectString = selectTextField.text
println(selectString)
textView.text = noteArray[selectString]
selectTextField.text = ""
【问题讨论】:
写一些代码来展示你到目前为止所做的努力 【参考方案1】:您想使用UIScrollView。这为您提供了一个可以平移的视图。
let scrollView: UIScrollView!
override func viewDidLoad()
super.viewDidLoad()
self.scrollView = UIScrollView(frame: self.view.bounds)
self.view.addSubview(self.scrollView)
要设置大小,请设置 UIScrollView 的 contentSize 属性。对于指南针/水平仪应用:
self.scrollView.contentSize = CGSize(width: 2 * theWidthOftheScreen, height: theHeightOfTheScreen)
要让滚动视图“捕捉”到最左边或最右边的滚动位置,请启用分页:
self.scrollView.pagingEnabled = true
还有很多其他属性,例如更改滚动条颜色或隐藏它们。
【讨论】:
如何处理放置在 UIScrollView 中的视图?例如,我将如何将我已经拥有的所有代码放在 UIView 上?另外,我如何将其中一个 UIView 设为默认?我希望中间视图成为默认视图。 您现在可以将所有代码留在 ViewController 中。虽然它不是最好的地方,但它仍然可以工作。要将视图添加到滚动视图,请调用self.scrollView.addSubview(*)
而不是 self.view.addSubview(*)
。我不知道你所说的“默认”是什么意思。如果您想选择在加载时显示滚动视图的哪一部分,您应该查看滚动视图的contentOffset
属性。
我并不是要粗鲁,但如果你是 Cocoa 和 ios 编程的初学者,我建议从 Obj-C 开始,因为 Swift 还很年轻,示例代码很少,而且许多错误和未完成的方面。
默认是什么意思?你能提供更多背景信息吗?
你完美地回答了我。这正是我想知道的。我从 swift 开始,因为它是一种年轻的语言。大多数 Objective-C 代码都可以轻松翻译。我对 Objective-C 的工作原理有一点了解,但它太“奇怪”了,我一直没能深入了解它。我可以编写基本代码,但实际上无法将其变成应用程序。 Swift 看起来简单多了。再次感谢朋友。以上是关于如何在 Swift 中创建像指南针一样的“滑动视图”?的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何在 iOS 中创建像墙或新闻源一样的 facebook
我可以使用 messageKIt 在 swift 5 ios 中创建像这样的自定义单元格吗?