天道酬勤,学无止境

ios

iOS Objective-C get VPN IP programmatically

问题 我使用第三方应用连接VPN,详细信息可以在Settings->VPN->information中获取。 如何通过 Objective-C 在我们的应用程序中以编程方式获取Assigned IP ? 回答1 NSString *address = @"error"; struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; // retrieve the current interfaces - returns 0 on success success = getifaddrs(&interfaces); if (success == 0) { // Loop through linked list of interfaces temp_addr = interfaces; while (temp_addr != NULL) { if( temp_addr->ifa_addr->sa_family == AF_INET) { // Check if interface is en0 which is the wifi connection on the iPhone if ([[NSString stringWithUTF8String:temp_addr->ifa

2022-07-11 09:51:30    分类:技术分享    ios   objective-c   vpn

Pause and Resume UIViewAnimation when app goes to background

问题 我正在为视图设置动画,我想暂停它并恢复它。 使用苹果指南,我创建了一个 CALayer 扩展 extension CALayer { func pause() { var pauseTime = self.convertTime(CACurrentMediaTime(), fromLayer: nil) self.speed = 0.0 self.timeOffset = pauseTime } func resume() { var pausedTime = self.timeOffset self.speed = 1.0 self.timeOffset = 0.0 self.beginTime = 0.0 var timeSincePause = self.convertTime(CACurrentMediaTime(), toLayer: nil) - pausedTime self.beginTime = timeSincePause } } 这段代码运行良好,除非该应用程序进入后台。 当我将应用程序带回前台时,动画完成(即使时间没有过去)并且当我单击恢复时它没有再次启动。 好的。 我尝试为 CALayer 设置动画,但我遇到了同样的问题。 extension CALayer { func animateY(newY:CGFloat,time

2022-07-11 09:42:24    分类:技术分享    ios   swift   uiviewanimation

Check if an integer is divisible by another integer (Swift)

问题 我需要检查一个整数是否可以被另一个整数整除。 如果不是,我想将其四舍五入到最接近的数字倍数。 例子: var numberOne = 3 var numberTwo = 5 numberTwo不是numberOne的倍数,因此我希望将numberTwo舍入到 6。 我该怎么做? 谢谢 回答1 您可以使用模运算符% : numberTwo % numberOne == 0 模求 2 个数字之间整数除法的余数,例如: 20 / 3 = 6 20 % 3 = 20 - 6 * 3 = 2 20/3 的结果是 6.666667 - 被除数 (20) 减去除数乘以除数 (3 * 6) 的整数部分是模 (20 - 6 * 3) ,在这种情况下等于 2。 如果模数为零,则被除数是除数的倍数 有关此维基百科页面上的模数的更多信息。 回答2 1)如果要检查或整数除以另一个整数: 斯威夫特 5 if numberOne.isMultiple(of: numberTwo) { ... } Swift 4 或更少 if numberOne % numberTwo == 0 { ... } 2)四舍五入到最接近的倍数的函数: func roundToClosestMultipleNumber(_ numberOne: Int, _ numberTwo: Int) -> Int { var result

2022-07-11 09:40:20    分类:技术分享    ios   swift   integer   division

Cleanest way to determine if SqlCipher DB is encrypted

问题 确定(名义上)SqlCipher 数据库是否实际加密(在 iOS 中)的最干净和最有效的方法是什么。 请注意,此处的技术不适用于 SqlCipher ——“SQLite 格式 3”前缀无论是否加密都有效。 显而易见的方法是打开数据库,尝试对其进行操作,然后查看返回码是否为 SQLITE_NOTADB。 但目前尚不清楚要尝试什么操作。 补充:嗯...显然某些版本的 SqlCipher 不保留文件前缀。 回答1 SQLCipher 在文件的前 16 个字节中存储一个唯一的随机盐。 如果您获得SQLite format 3\000并且内容仍然是加密的,那么它可能不是 SQLCipher 加密数据库。 最后,您还可以发出hexdump -C YourDatabase.db并检查输出,纯文本数据库将包含输出中的可见模式。

2022-07-11 09:35:30    分类:技术分享    ios   sqlite   sqlcipher

Display Section Header UICollectionReusableView

问题 我正在开发 iOS 应用程序,但在使用 UICollectionView 单元格时遇到了几个问题。 这次想问一下UICollectionView(UICollectionReusableView)的section header如何显示 我已经实现了如下功能: public func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { switch kind { case UICollectionElementKindSectionHeader: let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "cellHeader", for: indexPath as IndexPath) var labelHeader = headerView.viewWithTag(2) as! UILabel if indexPath.section == 0 {

2022-05-17 05:26:07    分类:技术分享    ios   swift   xcode   uicollectionview   uicollectionreusableview

Reading a Variable that Exists in a Delegate Function

问题 我有一个委托,它修改了一个名为tagToIndex的变量,我试图从委托中返回修改后的变量。 tagToIndex在类的前面定义,但它不包含我需要的信息。 我的问题是,有没有办法读取变量tagToIndex ,因为它存在于willPressItemAt函数中? 截至目前,我无法在函数之外读取变量。 显然我不能在willPressItemAt上使用return命令,因为这需要我输入我不能做的参数。 此外,我尝试使用委托,但并没有真正解决问题。 class MyCell: UITableViewCell, YSSegmentedControlDelegate { var tagToIndex = [0:0,1:0,2:0,3:0,4:0,5:0] let actionButton = YSSegmentedControl( frame: CGRect.zero, titles: [ "Yes", "No" ]) } func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { tagToIndex[actionButton.tag] = index print(tagToIndex) } func segmentedControl(_

2022-05-17 05:20:22    分类:技术分享    ios   swift   delegates

Firebase queryEqual(toValue:

问题 我正在尝试快速使用 queryEqual(toValue:。我遇到的问题是我得到了空值。 我的数据看起来像这样 "time" : { "149791341619654" : { "URL_ID" : "02D03DA8-A652-4EFA-946F-1F0F2A963449", "UUID" : "F496B98E-3B4E-4602-B06D-C09B7F42DCB5", "date" : 1.497913416196546E9, "huer" : 0, "latitude" : 32.87926715336076, "longitude" : -117.2139702738423, "type_" : "Image", "uid" : "BjN8usKaW7NhqD2DxPPqAkjhnSx2" }, "149791381894099" : { "URL_ID" : "AB8D20E9-D1EB-4FD0-B0A8-CE755D1D8B91", "UUID" : "F534E1FC-DC55-4AFB-847D-64B614EF7137", "date" : 1.497913818940991E9, "huer" : 0, "latitude" : 32.87926715336076, "longitude" : -117.2139702738423, "type_"

2022-05-17 05:13:03    分类:技术分享    ios   swift   firebase   firebase-realtime-database

is it possible to get the index (String.Index) value from the cursor position of a UITextView element in Swift?

问题 回答1 您可以获取从文档开头到所选范围开头的选定范围偏移量,并使用该偏移量获取字符串索引,如下所示: extension UITextView { var cursorOffset: Int? { guard let range = selectedTextRange else { return nil } return offset(from: beginningOfDocument, to: range.start) } var cursorIndex: String.Index? { guard let location = cursorOffset else { return nil } return Range(.init(location: location, length: 0), in: text)?.lowerBound } var cursorDistance: Int? { guard let cursorIndex = cursorIndex else { return nil } return text.distance(from: text.startIndex, to: cursorIndex) } } class ViewController: UIViewController, UITextViewDelegate { @IBOutlet

2022-05-17 04:04:03    分类:技术分享    ios   swift   xcode

Check if Timer is running

问题 我一直在尝试用计时器重新填充游戏生命,但是每当我离开视图并返回时,计时器就会重复并变得更快。 我试图用Timer?.isValid函数来解决这个问题,以便仅在计时器无效时运行计时器,因此它永远不会重复,但它似乎无法在 if 语句中检查计时器是否无效。 这是我到目前为止一直在使用的 if 语句: if (myTimer?.isValid){ } else{ //start timer } 任何帮助将不胜感激,谢谢。 回答1 var timer : Timer? func startTimer() { if timer == nil { timer = Timer.scheduledTimer... } } func stopTimer() { if timer != nil { timer!.invalidate() timer = nil } } 回答2

2022-05-17 03:30:29    分类:技术分享    ios   swift   xcode   swift3   nstimer

Detecting if user is playing music from another app

问题 我的游戏有游戏内配乐,如果用户从 Android 或 iOS 上的媒体应用程序播放他们自己的音乐,我想暂停音乐。 有没有一种方法可以有效地在 update() 函数中运行? 提前致谢! 回答1 您可以检查音乐是否按照这篇文章中的描述播放。 AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); if(manager.isMusicActive()) { // do something - or do it not } 将它包裹在 Java 中的一个类中,然后在AndroidJavaClass API 的帮助下从 C# 调用它。 但这需要Java。 您可以使用该代码并将其转换为完全不使用 Java 的 C#。 获取 UnityPlayerPlayer、Activity 和 Context。 其余的可以由AndroidJavaClass处理。 这是不需要 Java 插件的移植 C# 版本。 bool isMusicPlaying() { const string AUDIO_SERVICE = "audio"; AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player

2022-05-17 03:00:16    分类:技术分享    c#   android   ios   unity3d   audio-player   android-music-player