小编Lan*_*ria的帖子

Swift iOS-如何隐藏标签然后让它在一段时间后出现

我有一个标签,当按下按钮时它会被隐藏.经过一段时间,如60秒,我希望标签重新出现.我假设我在viewDidAppear中这样做,我该怎么做?

@IBOutlet weak var myLabel: UILabel!

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
       //after 60 secs myLabel should reappear
       //self.myLabel.isHidden = false
    }


@IBAction func buttonTapped(_ sender: UIButton){
       self.myLabel.isHidden = true
}
Run Code Online (Sandbox Code Playgroud)

timer viewdidappear hiddenfield ios swift

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

更新到 Xcode 10.2、Swift 5 后找不到“NBPhoneNumberDesc.h”文件

我正在使用 pod chronotruck/FlagPhoneNumber我刚刚更新为High Sierra/Xcode 10.1/Swift 4.2/Cocoapoods v-1.5.3to Mojave 10.14.15/Xcode 10.2.1/Swift 5/Cocoapoods v-1.7.3,但无法构建,因为在NBRegExMatcher.m文件内我收到错误

找不到“NBPhoneNumberDesc.h”文件

在此输入图像描述

升级之前一切正常,我从未遇到过任何此类错误。

Podfile.lock 里面有这个:

- FlagPhoneNumber (0.7.6):
- FlagPhoneNumber/libPhoneNumberiOS (= 0.7.6)
- FlagPhoneNumber/libPhoneNumberiOS (0.7.6)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,该 pod 中的其他几个文件也使用该#import "NBPhoneNumberDesc.h"模块,但它们都工作正常并且没有任何错误

在此输入图像描述

我尝试了这个答案,但 NBPhoneNumberDesc.h 已经在公共部分:

在此输入图像描述

我还尝试了这个答案来设置 SWIFT_OBJC_INTERFACE_HEADER_NAME 以匹配我的项目的桥接标头,但没有任何结果

在文件内NBRegExMatcher.m(发生错误的地方)我注释掉#import NBPhoneNumberDesc.h以查看会发生什么,然后 NBPhoneNumberUtil.h 得到相同的错误:

在此输入图像描述

我注意到它libPhoneNumber-iOS捆绑在FlagPhoneNumber吊舱内,它的版本是libPhoneNumberiOS (0.7.6). 然后,我手动将 pod 添加到我的项目中,看看会发生什么,但这也没有什么区别,错误仍然存​​在。我唯一注意到的是,当我手动添加 Pod 时,Podfile.lock 版本是- libPhoneNumber-iOS (0.9.15)其中,而 FlagPhoneNumber 正在使用的版本是libPhoneNumberiOS (0.7.6) …

module header-files ios cocoapods swift

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

如何创建 ElasticSearch 类型并使其可在索引内搜索

我是一名iOS Swift开发人员,我ElasticSearch在我的应用程序中使用。我试图围绕如何声明 a typein ES, atype和之间有什么区别document,以及哪个最类似于 an object/data model

Swift我会创建一个objectdata model这样的:

class Sneakers {
       var condition: String?
       var name: String?
}
Run Code Online (Sandbox Code Playgroud)

这是说我创建了一个名为 Sneakers 的对象,它有 2 个属性:“条件”和“名称” Optional(问号)都是 type String

我知道要创建并将我的 ES 设置为Index我使用以下内容:

curl -XPOST <bonsai_url>/myIndexName //I'm using Heroku & Bonsai for my ES cluster
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样设置一个类型

curl -XPOST <bonsai_url>/myIndexName/sneakerType
Run Code Online (Sandbox Code Playgroud)

我迷失的地方是如何设置索引以使用我的运动鞋数据模型作为搜索参考?在我的应用程序中,用户可以根据运动鞋的名称(耐克、阿迪达斯等)和状况(旧的、新的、二手的等)搜索鞋类。

我知道这有点像

curl -XPOST <bonsai_url>/myIndexName/sneakerType -d '
{
   "sneakers": {
      "properties": …
Run Code Online (Sandbox Code Playgroud)

curl types document datamodel elasticsearch

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

Swift iOS -DispatchWorkItem仍在运行,即使它已取消并设置为Nil

我使用GCD DispatchWorkItem来跟踪我发送到firebase的数据.

我做的第一件事是声明类型的2个类属性,DispatchWorkItem然后当我准备好将数据发送到firebase时,我用值初始化它们.

第一个属性被命名errorTask.当初始化它cancelsfirebaseTask,并将它设置nil,然后打印"errorTask炒鱿鱼".它有一个DispatchAsync Timer,将调用它0.0000000001秒如果errorTask没有之前那么取消.

第二个属性被命名firebaseTask.初始化时,它包含一个将数据发送到firebase的函数.如果firebase回调成功,则errorTask取消并设置为nil,然后打印一个打印语句"firebase callback".我还检查firebaseTask是否被取消.

问题是在到达回调errorTask之前始终运行的代码firebaseTask.该errorTask代码取消firebaseTask,将其设为零,但由于某种原因,firebaseTask仍然运行.我想不通为什么?

print语句支持errorTask首先运行的事实,因为 "errorTask fired"之前总是打印出来"firebase callback was reached".

为什么firebaseTask没有被取消并设置为nil,即使errorTask让这些事情发生了?

在我的实际应用程序中,如果用户向Firebase发送一些数据,则会出现活动指示符.达到firebase回调后,活动指示器将被解除,并向用户显示一条提示已成功的警报.但是,如果活动指示器上没有计时器并且从未达到回调,那么它将永远旋转.将DispatchAsyc after计时器设置为15秒,如果未达到回调,则会显示错误标签.它总是有效的10次中的9次.

  1. 将数据发送到FB
  2. 显示活动指标
  3. 达到回调所以取消errorTask,将其设置为nil,并关闭活动指示器
  4. 显示成功警报.

但每一次都在

  1. 这需要15秒以上的时间
  2. firebaseTask 取消并设置为nil,活动指示器将被取消
  3. 错误标签会显示
  4. 成功警报仍然会出现

errorTask代码块驳回actiInd,示出了errorLabel,并取消firebaseTask,并将其设置到零.一旦firebaseTask被取消并设置为nil,我假设其中的所有内容也将停止,因为从未到达回调. 这可能是我混淆的原因.似乎即使firebaseTask取消并设置为nil,someRef?.updateChildValues(...仍然以某种方式运行,我也需要取消它.

我的代码:

var errorTask:DispatchWorkItem?
var firebaseTask:DispatchWorkItem?

@IBAction func …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch ios swift dispatchworkitem

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

如何防止 UISlider 在捕捉/步进时跳入到位

我有一个 UISlider,可以卡入 5 个不同的位置。

slider.minimumValue = 1
slider.maximumValue = 5
Run Code Online (Sandbox Code Playgroud)

卡扣效果很好,但很突然,并且不能顺利卡到位。它有点“跳”到位

我尝试为滚动设置动画(不起作用):

@objc func onSliderValChanged(_ sender: UISlider) {
    UIView.animate(withDuration: 0.5) {
        self.slider.value = round(sender.value)
        self.slider.setValue(round(sender.value), animated: true)
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试添加 panGesture (不起作用):

panGesture = UIPanGestureRecognizer(target: self, action: #selector(panGestureHandler(_:)))
slider.addGestureRecognizer(panGesture)

@objc func panGestureHandler(_ recognizer: UIPanGestureRecognizer){

    let currentPoint = recognizer.location(in: slider)
    let percentage = currentPoint.x/slider.bounds.size.width

    let delta = Float(percentage) * (slider.maximumValue - slider.minimumValue)
    let value = slider.minimumValue + delta
    slider.setValue(round(value), animated: true)
}
Run Code Online (Sandbox Code Playgroud)

如何实现滑块平滑滚动但仍卡入到位?

这是没有上述尝试的原始代码:

let slider: UISlider = {
    let slider …
Run Code Online (Sandbox Code Playgroud)

scroll uislider ios swift

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

Cocapods - 无法将 pod ObjectMapper 更新到 3.3 版错误 [!] 未知命令:`ObjectMapper,`

我刚刚更新到Xcode 10.1Swift 版本4.2.1,我有几个构建错误:

'<~' 的重新声明无效

我跟着这个 GitHub q&A这个说我需要将ObjectMapperpod更新到版本的3.3

我没有在常规Podfile中看到ObjectMapper但是我在里面看到了它,Podfile.Lock并且版本是- ObjectMapper (2.2.9)

在此处输入图片说明

然后我去了终端并尝试了所有这些更新,3.3但没有一个工作:

$ pod repo update
$ pod update
$ pod update ObjectMapper
$ pod 'ObjectMapper', '~> 3.3'
$ pod 'ObjectMapper', '3.3'
Run Code Online (Sandbox Code Playgroud)

在终端我不断得到:

在此处输入图片说明

为什么我一直收到这个错误?

这是常规的 podfile:

# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'

target 'MyProject' do
  # Comment the next line if you're …
Run Code Online (Sandbox Code Playgroud)

xcode cocoapods podfile

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

Swift - 如何更新自定义 MKAnnotation 标注中的数据?

我的地图视图有一个自定义注释。我最初使用一些数据设置了坐标、标题(例如“第一个标题”)、副标题(例如“第一个地址”)、userId 和距离(例如 0 米)属性。我将其添加到 mapView 和数组中以供以后使用。一切正常,它显示在地图视图上,我按下它,标注显示初始数据。

后来我得知该标注的位置已更改。我循环遍历数组并使用坐标、标题(例如“新标题”)、副标题(例如“新地址”)和距离(例如 100 米)属性的新数据更新标注。我还将标注从原始位置动画化到新位置。动画工作正常,标注从 A 点移动到 B 点。

问题是,当我点击注释时,旧数据会显示在标注上,而不是新数据。

我过去常calloutAccessoryControlTapped推新的VC。当我在那里放置断点时,自定义引脚具有所有新数据。该错误似乎是在标注时发生的。

我该如何解决?

我不想清除地图视图中的所有注释,所以这不是一个选项。我致电mapView.removeAnnotation(customPin)mapView.addAnnotation(customPin)解决了该图钉的问题,但是当图钉被移除并添加回地图时,会出现闪烁,然后当它动画到新位置时,它看起来不稳定。

自定义注释

class CustomPin: NSObject, MKAnnotation {

    @objc dynamic var coordinate: CLLocationCoordinate2D
    var title: String?
    var subtitle: String?
    var userId: String?
    var distance: CLLocationDistance?

    init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String, userId: String, distance: CLLocationDistance?) {

        self.coordinate = coordinate
        self.title = title
        self.subtitle = subtitle
        self.userId = userId
        self.distance = distance

        super.init()
    }
}
Run Code Online (Sandbox Code Playgroud)

第一次使用初始数据设置注释

firstFunctionThatGetsTheInitialLocation(origLat, origLon) {

   let …
Run Code Online (Sandbox Code Playgroud)

mkannotation ios swift calloutview

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

Swift iOS-如何设置UIView的高度锚<=到标签的内在文本大小?'NSLayoutConstraint'不能转换为'Bool'

我有一个程序化视图,里面有一个标签,我固定在navBar的底部.标签内部会有动态文本,如果文本的高度变小,我希望标签所在的视图至少为64磅或更大.

此标签中文本的内在大小将视图设置在显着高度.

setViewAndLabel(dynamicText: "Unknown Error\nPlease try your request again\Error: 123")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,此文本的内在大小使高度变小:

setViewAndLabel(dynamicText: "Message Deleted!")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

留言删除!应该更符合:

在此输入图像描述

我使用了一些返回键来设置它,但我不认为这是正确的方法,因为将生成不同的消息:

setViewAndLabel(dynamicText: "\nMessage Deleted!\n")
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

if myView.heightAnchor.constraint(lessThanOrEqualToConstant: 64){
     myView.heightAnchor.constraint(equalToConstant: 64).isActive = true
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

'NSLayoutConstraint'不能转换为'Bool'

设置标签高度到最小高度的最佳方法是什么?

var myLabel: UILabel(){
   let label = UILabel()
   label.translatesAutoresizingMaskIntoConstraints = false
   label.textColor = UIColor.white
   label.font = UIFont(name: "Helvetica-Regular", size: 19)
   label.numberOfLines = 0
   label.sizeToFit()
   label.textAlignment = .center
   return label
}

let myView:UIView = {
   let view = UIView()
   view.translatesAutoresizingMaskIntoConstraints = false
   return view
}()

override func viewWillAppear(_ animated: …
Run Code Online (Sandbox Code Playgroud)

constraints uiview uilabel ios swift

2
推荐指数
1
解决办法
6347
查看次数

Swift iOS -CMTimeMakeWithSeconds:警告:由于时间比例非常低,引入了-0.433错误

我正在使用AVPlayer播放视频。我遵循了此视频教程,让我们构建该应用程序

我使用UISlider / scrubber以及视频的当前帧/时间。

我有一个10.43秒的视频,并且我使用了快进功能,将我带到了尽头。

@objc fileprivate func fastForwardButtonTapped() {

        guard let playerItem = playerItem else { return }
        guard let player = player else { return }

        let duration: Float64 = CMTimeGetSeconds(playerItem.duration)
        let seekTime: CMTime = CMTimeMakeWithSeconds(duration, 1)
        player.seek(to: seekTime)
}
Run Code Online (Sandbox Code Playgroud)

视频播放到最后,但问题是滑块仅到达10秒点,而我无法到达最后的0.43秒。我收到以下警告消息:

在此处输入图片说明

滑块的值在中确定。player?.addPeriodicTimeObserver()因此,当我快速向前按而不是滑块到达终点时,它会停止几个点的距离(请注意空白):

在此处输入图片说明

如何获得更准确的值,以便滑块可以一直擦洗到底?

playerItem?.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status),
                                options: [.old, .new],
                                context: &playerItemContext)

let interval = CMTime(value: 1, timescale: 2)

timeObserverToken = player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: {
    [weak self] (progressTime) in

    let seconds = CMTimeGetSeconds(progressTime)

    let …
Run Code Online (Sandbox Code Playgroud)

uislider ios avplayer cmtime swift

2
推荐指数
1
解决办法
1645
查看次数

SwiftLint - 禁用特定文件中的行长规则

当前 SwiftLint 规则:

file_length:
  warning: 800
  error: 1500
Run Code Online (Sandbox Code Playgroud)

错误

在此处输入图片说明

我遵循了这个答案,但错误并没有消失

// swiftlint:disable force_cast

import UIKit

class MyClass: UIViewController {

}

// swiftlint:enable force_cast
Run Code Online (Sandbox Code Playgroud)

如何忽略某些文件中的 SwiftLint 规则?

ios swift swiftlint

2
推荐指数
1
解决办法
2850
查看次数