我知道这是一个简单而愚蠢的问题,但我找不到为什么会出错。我想在获取文件后打印项目的应用程序版本xcarchive。我正在用PlistBuddy这个。
/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" /build/My_Project.xcarchive/Info.plist
Run Code Online (Sandbox Code Playgroud)
这段代码返回
打印:条目“CFBundleShortVersionString”不存在
但是,我可以成功打印“ApplicationProperties”或整个 plist 文件。可能是什么问题?
我有一个可扩展的UITableView。当用户点击标题时,相关的单元格将显示一个动画(RowAnimation.Fade),然后UITableView滚动到该标题(展开的标题)。当用户再次点击该标题时,它将折叠。
我要实现的目标:我需要具有标题和单元格的可扩展UITableView。用户点击标题时,需要使用来打开单元格RowAnimation.Fade,然后滚动到该标题。
奖励:如果在用户点击标题时可以使箭头动画化,那还是很棒的,但是我认为这会引起另一个错误,因为我们在同一线程(主线程)上运行了很多动画
我的问题是,当用户点击标题时,tableView内容插入项将发生更改,整个标题将变为负Y位置。因此发生了奇怪的动画。(例如,标题看起来在单元格的中心)但是,动画结束后,一切看起来都正确。
func toggleSection(header: DistrictTableViewHeader, section: Int) {
self.selectedHeaderIndex = section
self.cities[section].isCollapsed = !self.cities[section].isCollapsed
let contentOffset = self.tableView.contentOffset
self.tableView.reloadSections(IndexSet(integer: section), with: UITableView.RowAnimation.fade)
self.tableView.scrollToRow(at: IndexPath(row: NSNotFound, section: section) /* you can pass NSNotFound to scroll to the top of the section even if that section has 0 rows */, at: UITableView.ScrollPosition.top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
另外:我如下设置标题和单元格的高度。
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 1
}
func tableView(_ …Run Code Online (Sandbox Code Playgroud) 我在UIImageView下面有一个标签。
标签是可拖动、可平移和可捏合的。但是我一次只能做一个手势。例如,我想在捏合标签时拖动标签,就像在 Snapchat 和 Whatsapp 中的图像文本中一样。我的功能如下。在我搜索时,我认为我应该创建一个自定义手势识别器,但我不知道如何创建。有什么办法可以在不创建自定义识别器的情况下做到这一点?
在执行此操作时,我从这篇文章中得到了帮助: 图像上的类似 Snapchat 的文本
func handlePan(recognizer: UIPanGestureRecognizer) {
var translation = recognizer.translation(in: allview)
translation.x = max(translation.x, imageview.frame.minX - mylabel.frame.minX)
translation.x = min(translation.x, imageview.frame.maxX - mylabel.frame.maxX)
translation.y = max(translation.y, imageview.frame.minY - mylabel.frame.minY)
translation.y = min(translation.y, imageview.frame.maxY - mylabel.frame.maxY)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero , in: view)
}
func handlePinch(recognizer: UIPinchGestureRecognizer) {
if let view = recognizer.view as? UILabel {
let pinchScale: CGFloat …Run Code Online (Sandbox Code Playgroud) 我正在连续调用三个服务。当我调用第三个服务时,我需要使用第一个服务响应中的变量,即userModel. 我可以从中获得第二个服务响应,initModel但无法达到第一个模型userModel。我的问题是 如何通过返回然后阻止在 done 块中使用 userModel ?
PS:我试图-> Promise<(UserModel,InstallationModel)>在第一次调用时返回,但因为UserModel已经是一个对象而不是一个承诺,我需要将它转换为承诺返回它。这看起来像我这样做的坏方法。
正如你所看到的,我正在存储它self.userModel = userModel,我不想这样做。
func callService(completionHandler: @escaping (Result<UserModel>) -> Void) {
SandboxService.createsandboxUser().then { userModel -> Promise<InstallationModel> in
self.userModel = userModel
return SandboxService.initializeClient(publicKey: self.keyPairs.publicKey)
}.then { initModel -> Promise<DeviceServerResponseModel> in
self.initModel = initModel
if let unwrappedUserModel = self.userModel {
return SandboxService.deviceServerServiceCaller(authKey: initModel.token.token,apiKey:unwrappedUserModel.apiKey,privaKey: self.keyPairs.privateKey)
}
throw ServiceError.handleParseError()
}.then { serverResponseModel -> Promise<UserModel> in
if let unwrappedInitModel = self.initModel, let unwrappedUserModel …Run Code Online (Sandbox Code Playgroud) 我有一个图像视图和该图像上的文本字段。我使用下面的代码使文本字段可拖动,但它可以拖动到屏幕中的任何位置。我希望该文本字段只能在图像视图的限制内拖动。如果我取消注释,如果检查 dragedView 函数,则文本字段会卡在 imageview 的左侧,因为它们的 x 值变得相同。
我找到了这个解决方案,但无法修改它以适用于我的项目。 使用 UIPanGestureRecognizer 将 UIView 拖动到有限区域内
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let gesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.draggedView(_:)))
bottomTextField.addGestureRecognizer(gesture)
bottomTextField.isUserInteractionEnabled = true
}
func userDragged(gesture: UIPanGestureRecognizer){
let loc = gesture.location(in: self.view)
self.bottomTextField.center = loc
}
func draggedView(_ sender:UIPanGestureRecognizer) {
let compare = MyimageView.frame.maxX <= bottomTextField.frame.maxX
//if(MyimageView.frame.minX <= bottomTextField.frame.minX && compare )
// {
self.view.bringSubview(toFront: sender.view!)
let translation = sender.translation(in: self.view) …Run Code Online (Sandbox Code Playgroud) ios ×5
swift ×4
imageview ×1
plist ×1
promisekit ×1
terminal ×1
textfield ×1
uitableview ×1
view ×1
xcode ×1