小编Emr*_*der的帖子

使用 PlistBuddy 获取应用程序版本返回“CFBundleShortVersionString 不存在”

我知道这是一个简单而愚蠢的问题,但我找不到为什么会出错。我想在获取文件后打印项目的应用程序版本xcarchive。我正在用PlistBuddy这个。

/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" /build/My_Project.xcarchive/Info.plist 
Run Code Online (Sandbox Code Playgroud)

这段代码返回

打印:条目“CFBundleShortVersionString”不存在

但是,我可以成功打印“ApplicationProperties”或整个 plist 文件。可能是什么问题?

terminal plist ios

5
推荐指数
1
解决办法
3450
查看次数

UITableView重新加载节时内容插入更改

我有一个可扩展的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)

uitableview ios swift

4
推荐指数
1
解决办法
555
查看次数

同时捏合、拖动和平移

我在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)

uigesturerecognizer ios uipinchgesturerecognizer swift

3
推荐指数
1
解决办法
2056
查看次数

在 PromiseKit 中获取第一个响应对象然后完成块

我正在连续调用三个服务。当我调用第三个服务时,我需要使用第一个服务响应中的变量,即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)

xcode ios swift promisekit

3
推荐指数
1
解决办法
384
查看次数

在 Swift 中设置可拖动项目的限制

我有一个图像视图和该图像上的文本字段。我使用下面的代码使文本字段可拖动,但它可以拖动到屏幕中的任何位置。我希望该文本字段只能在图像视图的限制内拖动。如果我取消注释,如果检查 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)

view textfield imageview ios swift

0
推荐指数
1
解决办法
1230
查看次数