我正在用可可豆荚(Shuffle)构建一个应用程序,其中有一个cardStack(tinder风格),每个卡片在中心包含一个单词。我正试图用下面的代码为每张卡片添加一个按钮,但是当我设法以编程方式添加按钮时,我无法将其居中:当我使用“button.center=card.center”时,按钮将保留在“卡片视图”的坐标(0,0)处。我附上了一张截图,你可以看到右上角(0,0)坐标处的圆角白色按钮,如前所述。我错在哪里?它应该是相当初级的,但我被卡住了。
import UIKit
import Shuffle
class CardsViewController: UIViewController, SwipeCardStackDataSource, SwipeCardStackDelegate {
let cardStack = SwipeCardStack()
var actualIndex : Int = 0
var showingBack = false
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(cardStack)
cardStack.frame.size.height = view.frame.size.height - 180
cardStack.frame.size.width = view.frame.size.width
cardStack.center.y = CGFloat(cardStack.frame.size.height/2)
cardStack.center.x = CGFloat(cardStack.frame.size.width/2)
cardStack.center = CGPoint(x: view.center.x, y: view.center.y + 78)
cardStack.dataSource = self
// BUTTON
// NAVIGATION BAR TRANSPARENT
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
// CENTRAL BUTTON
}
func card(fromImage word: String) -> SwipeCard {
let card = SwipeCard()
card.swipeDirections = [.left, .right]
for direction in card.swipeDirections {
card.setOverlay(CardOverlay(direction: direction), forDirection: direction)
}
card.content = CardContentView(withWord: word)
card.footer = CardFooterView(withTitle: "", subtitle: "")
view.backgroundColor = .red
let button = UIButton()
button.frame.size = CGSize(width: 70, height: 70)
button.layer.cornerRadius = button.frame.width/2
button.clipsToBounds = true
button.backgroundColor = .init(white: 1, alpha: 1)
button.center = card.center
card.addSubview(button)
return card
}
func cardStack(_ cardStack: SwipeCardStack, cardForIndexAt index: Int) -> SwipeCard {
let theCard = card(fromImage: cardWords[actualIndex].word)
actualIndex = actualIndex + 1
return theCard
}
截图
问题是,当您试图添加按钮时,卡
框架尚未有效。
我还没有使用过这个“shuffle”pod,但是快速的查看告诉我你想要使用自动布局/约束,而不是尝试根据框架中心设置按钮的位置。
这样试试:
func card(fromImage word: String) -> SwipeCard {
let card = SwipeCard()
card.swipeDirections = [.left, .right]
for direction in card.swipeDirections {
card.setOverlay(CardOverlay(direction: direction), forDirection: direction)
}
card.content = CardContentView(withWord: word)
card.footer = CardFooterView(withTitle: "", subtitle: "")
view.backgroundColor = .red
// changes begin here...
let button = UIButton()
// use auto-layout / constraints
//button.frame.size = CGSize(width: 70, height: 70)
button.translatesAutoresizingMaskIntoConstraints = false
// add button to card
card.addSubview(button)
// button width = 70, height equalTo width
button.widthAnchor.constraint(equalToConstant: 70.0).isActive = true
button.heightAnchor.constraint(equalTo: button.widthAnchor).isActive = true
// center it in the card view
button.centerXAnchor.constraint(equalTo: card.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: card.centerYAnchor).isActive = true
// frame is not yet valid, so use 70 / 2
button.layer.cornerRadius = 35.0 //button.frame.width/2
button.clipsToBounds = true
button.backgroundColor = .init(white: 1, alpha: 1)
return card
}
根据您的SwipeCard
和CardContentView
类设置的方式,您可能需要将按钮添加到内容视图中,而不是添加到卡本身(您没有显示那些类,所以很难猜测)。
作为附带说明:您确实应该修改SwipeCard
类或CardContentView
类,并在其中添加按钮...
基本上,当点击其中一个按钮时,代码中的变量就会发生变化。这些按钮运行良好,完全符合我的要求,但当按钮超过13个时,它们不会全部出现,我需要52个。
https://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.6.release com.bookstore bookstore 0.0.1-snapshot bookstore这是我的项目的描述。 http://localhost:8081/M
问题内容: 函数定义中的下划线是什么意思? 例如 我了解在定义函数时,我可以执行以下操作: 然后,我将其称为而不是,即故意隐藏参数名称吗? 问题答案: Swift需要一个约定来说明函数名称是什么,不仅包括函数名称本身(在括号之前),还包括参数的外部名称。约定是名称后跟冒号。因此,这是一个函数声明(在Swift 2.0中): 这是该函数的名称: 但是,在现实生活中,一个或多个参数有可能(实际上)不会
我知道以前可能有人问过这个问题,但我似乎找不到适合我情况的合理答案。 我有一个表单,表单中有多个提交按钮,我需要知道按下了哪个按钮。 表单内部的一个小代码段可能如下所示: fmt:消息部分只是考虑了客户端的语言并将单词放在按钮上。 到目前为止,我在submit按钮上添加了一个动作处理程序,并在表单上添加了一个隐藏的input元素,告诉我哪个按钮被按下了,但是我需要在不依赖javascript的情况
问题内容: 我有一个包含多个链接的页面,可将用户重定向到其他页面。我以为使用表单会更好,所以我定义了一个带有Multiple的WTForms 。如何确定单击了哪个按钮并基于该按钮重定向? 问题答案: 您在表单中添加了两个按钮,因此请检查哪个字段的数据是。