Xcode:11.2.1
下面的代码是一个包含两个组件的简单表单;选择器(选择字母)和文本(显示所选字母)。代码编译并运行,但是当选择一个字母时,它不会出现在“选定...”文本中。此外,第一次(仅)选择一个字母时,Xcode 会显示一个(虚假的?)运行时警告。
struct ContentView: View {
@State private var letter = ""
private let letters = ["Alpha", "Bravo", "Charlie"]
var body: some View {
NavigationView {
Form {
Picker("Select a letter", selection: $letter) {
ForEach(0..<letters.count) {
Text(self.letters[$0])
}
}
Text("Selected letter: \(letter)")
}
.navigationBarTitle("Main Menu")
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关信息:运行时警告:
[TableView] 仅警告一次:UITableView 被告知在不位于视图层次结构中的情况下布局其可见单元格和其他内容(表视图或其超级视图之一尚未添加到窗口中)。这可能会因为在没有准确信息(例如表视图边界、特征集合、布局边距、安全区域插入等)的情况下强制表视图内的视图加载和执行布局而导致错误,并且还会因额外的布局传递而导致不必要的性能开销。在 UITableViewAlertForLayoutOutsideViewHierarchy 处设置一个符号断点,以在调试器中捕获此情况并查看导致此情况发生的原因,因此您可以在可能的情况下完全避免此操作,或者将其推迟到表视图添加到窗口中为止。表视图:<_TtC7SwiftUIP33_BFB370BA5F1BADDC9D83021565761A4925UpdateCoalescingTableView:0x7f8b33872600;基类 = UITableView; 帧=(0 0;414 896);剪辑边界=是;自动调整大小=W+H;手势识别器 = ; 层=; 内容偏移:{0,-140};内容大小:{414,205.33333333333337};调整后的内容插入: {140, 0, 34, 0}; 数据源:<_TtGC7SwiftUIP10 $10f5cd23419ListCoreCoordinatorGVS_20SystemListDataSourceOs5Never_GOS_19SelectionManagerBoxS2___:0x7f8b33407a70>>
在 Swift 中,我会这样做以显示预先编写的消息
let composeVC = MFMessageComposeViewController()
composeVC.messageComposeDelegate = self
composeVC.recipients = ["9999999999"]
composeVC.body = "Text Message"
if MFMessageComposeViewController.canSendText() {
self.present(composeVC, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
在 SwiftUI 中,这会引发错误
Cannot assign value of type 'ContentView' to type 'MFMessageComposeViewControllerDelegate?'
Run Code Online (Sandbox Code Playgroud)
和
Value of type 'ContentView' has no member 'present'
Run Code Online (Sandbox Code Playgroud) 在 iOS 13 中更改模式时,我在切换颜色时遇到问题。
问题是当您在最近的应用程序中看到该应用程序时。UIColors 会改变,但 cgColor 不会改变。
当您打开应用程序时,它会有效地改变,但最近它不会改变。
我正在使用以下苹果文档中提到的“traitCollectionDidChange”方法。 https://developer.apple.com/documentation/xcode/supporting_dark_mode_in_your_interface
请观看视频以更清楚地了解 https://www.youtube.com/watch?v=C-pcVuPMQ9U&feature=youtu.be
class ViewController: UIViewController {
@IBOutlet weak var viewColor: UIView!
let layerColor = CALayer()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setLayer()
setColors()
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
setColors()
}
}
func setColors() {
layerColor.backgroundColor = UIColor(named: "layerColor")?.cgColor
}
func setLayer() {
layerColor.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
viewColor.layer.addSublayer(layerColor)
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试从圆形动画到带有圆角的正方形。据我所知,为了流畅的动画,两条路径的点数应该相等。所以我写了一个函数,它基于许多弧来构建一个圆:
private func circleShape(segmentNumber: Int = 8, radius: CGFloat = 32) -> CGPath {
let center = self.bounds.center
let circlePath = UIBezierPath()
let segmentAngle = CGFloat.pi * CGFloat(2) / CGFloat(segmentNumber)
var currentAngle: CGFloat = 0
for _ in 0 ..< segmentNumber {
let nextAngle = currentAngle + segmentAngle
circlePath.addArc(withCenter: center, radius: radius,
startAngle: currentAngle, endAngle: nextAngle, clockwise: true)
currentAngle = nextAngle
}
circlePath.close()
return circlePath.cgPath
}
Run Code Online (Sandbox Code Playgroud)
我正在使用getPathElementsPointsAndTypes()检查点数,它与segmentNumber不成比例地增加(segmentNumber: 1, points: 13; sN: 2, p: 14; sN: 3, …
我正在尝试使用CABasicAnimation关键路径但是对图层路径属性进行动画处理。没有得到准确的结果
我正在寻找的路径动画的变化如下
预期动画
注意:-请忽略开关..我的重点只是从动画circular到moon动画的路径变化
我尝试过什么
这是我尝试获取此路径转换动画的代码
@IBDesignable class CustomView: UIView {
private lazy var shapeLayer = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
private func commonInit() {
shapeLayer.frame = bounds
shapeLayer.fillColor = UIColor.black.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 3
layer.addSublayer(shapeLayer)
}
override func layoutSubviews() {
shapeLayer.path = drawSunShape(bounds)
}
private func drawSunShape(_ group:CGRect) -> CGPath {
let bezierPath = UIBezierPath()
let radius = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Swift 5、Xcode 11 和 ui 表视图控制器创建一个简单的应用程序。在 ui 表视图中,我想要 2 个按钮:一个按钮在我的表视图左侧,另一个在右侧。我尝试了许多其他相关/类似问题的答案,但都失败了(可能是因为 1. 太旧了,2. 用 OBJ-C 编写的答案)。
这是我的表视图控制器:
import UIKit
@objcMembers class CustomViewController: UITableViewController {
var tag = 0
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
// 3
override func tableView(_ …Run Code Online (Sandbox Code Playgroud) 做了一个简单的增量游戏。我希望这样即使我转到不同的VC然后返回游戏或重新打开游戏,它也会显示当前分数。我的问题是,如果我离开游戏,那么分数将归零。我不希望这种情况发生。分数不应该被重置。我听说我可以使用 UserDefaults,但我根本不熟悉它。如果您可以使用代码进行解释,那将是最好的。谢谢。
import UIKit
class CookieClickerVC: UIViewController {
@IBOutlet weak var goldLabel: UILabel!
@IBOutlet weak var numberOfGold: UILabel!
@IBOutlet weak var getGoldButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
formatItems()
let defaults = UserDefaults.standard
defaults.set(0, forKey: "goldCount")
}
@IBAction func getGoldClicked(_ sender: Any) {
goldCount += 1
numberOfGold.text = ("\(goldCount)")
}`
Run Code Online (Sandbox Code Playgroud)
此外,您可能已经想通了,但是 goldCount 是一个未解析的标识符。单击按钮后我应该如何更改代码?
所以我正在尝试制作一个进度条。所以我制作了圆形路径,但我希望点位于进度条的末尾,但是如何使点的位置位于当前进度的末尾?
private func simpleShape() {
let width: CGFloat = 10
createCircle()
//make circle transparant in middle
progressLayer.fillColor = UIColor.clear.cgColor
progressLayer.strokeColor = UIColor.blue.cgColor
progressLayer.lineCap = CAShapeLayerLineCap.round
progressLayer.lineWidth = width
progressLayer.strokeStart = 0
progressLayer.strokeEnd = 0
//unfilled
backLayer.lineWidth = width
backLayer.strokeColor = #colorLiteral(red: 0.1411764706, green: 0.1725490196, blue: 0.2431372549, alpha: 1).cgColor
backLayer.strokeEnd = 1
self.layer.addSublayer(gradientLayer)
}
private func createCircle() {
//create circle
let circle = UIView(frame: bounds)
circle.layoutIfNeeded()
let centerPoint = CGPoint (x: circle.bounds.width / 2, y: circle.bounds.width / 2)
let circleRadius: CGFloat …Run Code Online (Sandbox Code Playgroud) 我在将我的应用程序上传到 AppStore 时遇到问题。苹果表示,我使用的是过时的API, UIWebView。但我检查了我的整个项目,没有UIWebView. 有没有人遇到过这个错误?谢谢。这是苹果的消息:
ITMS-90809:不推荐使用 API - Apple 将停止接受使用 UIWebView API 的应用程序的提交。有关更多信息,请参阅 https://developer.apple.com/documentation/uikit/uiwebview。
更正问题后,您可以将新的二进制文件上传到 App Store Connect。
这是我的豆荚:
pod 'Alamofire', '<= 4.8.0'
pod 'AlamofireObjectMapper', '<= 5.2.0'
pod 'SDWebImage', '<= 4.4.3'
pod 'ReachabilitySwift', '<= 4.3.0'
pod 'RealmSwift'
pod 'ValidationComponents', '~> 0.3.0'
pod 'Willow', '<= 5.1.0'
pod 'CountryPickerView', '<= 2.2.0'
pod 'PhoneNumberKit', '~> 2.6'
pod 'IQKeyboardManagerSwift'
pod 'SwiftKeychainWrapper', '<= 3.0.1'
pod 'Toast-Swift', '<= 4.0.1'
pod 'MBProgressHUD', '~> 1.1.0'
pod 'Mixpanel-swift', '~> 2.6.2'
pod 'ServiceSDK/Chat', '<= 218.0.0'
pod …Run Code Online (Sandbox Code Playgroud) 我一整天都在寻求这方面的帮助,但找不到答案。
我有一个子视图,在其中绘制一个矩形,该矩形由子视图构成,因此我需要知道通过自动布局调整的子视图的大小以正确地构建它。我无法找到一种方法来执行此操作ViewDidLoad(),以便在启动时正确渲染矩形。我已经尝试过以下方法:
dayView.setNeedsLayout()后跟,但检查这些语句的两侧显示 dayView.bounds 不变。dayView.layoutIfNeeded()viewDidLoad()viewDidLayoutSubviews(),它可以工作,但会导致我的矩形被绘制 5 次,就像viewDidLayoutSubviews()为每个重绘的子视图(我有 5 个)所调用的那样(包含矩形的相关子视图在 5 次调用中的 4 次调用时重绘) - 这看起来浪费资源,肯定有更好的方法吗?ViewDidLoad(),希望第一次强制绘制会导致视图调整大小,因此第二次绘制将在第一次绘制后访问新的边界(我知道很绝望,但它仍然不起作用)。我希望有人能帮帮忙。
func drawGradient(object: UIView, rect: CGRect, slackX: Int, gradWidth: Int, yPos: Int) -> Void {
// the rectangle width and height set to fit within view with x & y border.
let gradientView = UIView(frame: rect)
let gradient = CAGradientLayer()
gradient.frame = gradientView.frame
gradient.colors = getDayGradientLocations().gradientCol
gradient.locations = getDayGradientLocations().gradientLoc …Run Code Online (Sandbox Code Playgroud) ios ×11
swift ×11
xcode ×6
calayer ×4
uibezierpath ×4
swiftui ×2
uikit ×2
autolayout ×1
cashapelayer ×1
cgcolor ×1
gpuimage ×1
objective-c ×1
picker ×1
uitableview ×1
uiwebview ×1
wkwebview ×1