- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所有代码都运行良好,但没有给出所需的结果。方向针没有移动到最佳位置。有时有效,有时无效。
func DegreesToRadians (value:Double) -> Double {
return value * M_PI / 180.0
}
func RadiansToDegrees (value:Double) -> Double {
return value * 180.0 / M_PI
}
class ViewController: UIViewController , CLLocationManagerDelegate {
var needleAngle : Double?
//Main Composs
@IBOutlet weak var composs: UIImageView!
//Needle Move with respect to compose
@IBOutlet weak var needle: UIImageView!
@IBOutlet weak var mapView: MKMapView!
// Kabhalocation
var kabahLocation : CLLocation?
var latitude : Double?
var longitude : Double?
var distanceFromKabah : Double?
let locationManger = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
//KabhaLocation Hardcoded.
kabahLocation = CLLocation(latitude: 21.42 , longitude: 39.83)
//Delegate
self.locationManger.delegate = self
self.locationManger.desiredAccuracy = kCLLocationAccuracyBest
if #available(iOS 8.0, *) {
self.locationManger.requestAlwaysAuthorization()
} else {
// Fallback on earlier versions
}
self.locationManger.startUpdatingLocation()
self.locationManger.startUpdatingHeading()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Mark: - LocationManger Delegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
let center = CLLocationCoordinate2D(latitude: (location?.coordinate.latitude)!, longitude: (location?.coordinate.longitude)!)
print("current location latitude \((location?.coordinate.latitude)!) and longitude \((location?.coordinate.longitude)!)")
self.latitude = location?.coordinate.latitude
self.longitude = location?.coordinate.longitude
//
// self.latitude = 31.5497
// self.longitude = 74.3436
self.locationManger.startUpdatingLocation()
needleAngle = self.setLatLonForDistanceAndAngle(location!)
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("Error " + error.localizedDescription)
}
func setLatLonForDistanceAndAngle(userlocation: CLLocation) -> Double
{
let lat1 = DegreesToRadians(userlocation.coordinate.latitude)
let lon1 = DegreesToRadians(userlocation.coordinate.longitude)
let lat2 = DegreesToRadians(kabahLocation!.coordinate.latitude)
let lon2 = DegreesToRadians(kabahLocation!.coordinate.longitude)
distanceFromKabah = userlocation.distanceFromLocation(kabahLocation!)
let dLon = lon2 - lon1;
let y = sin(dLon) * cos(lat2)
let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon)
var radiansBearing = atan2(y, x)
if(radiansBearing < 0.0)
{
radiansBearing += 2*M_PI;
}
// print("Initial Bearing \(radiansBearing*180/M_PI)")
let distanceFromKabahUnit = 0.0
return radiansBearing
}
func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
let needleDirection = -newHeading.trueHeading;
let compassDirection = -newHeading.magneticHeading;
self.needle.transform = CGAffineTransformMakeRotation(CGFloat(((Double(needleDirection) ) / 180.0) + needleAngle!))
print("Needle \(CGAffineTransformMakeRotation(CGFloat(((Double(needleDirection) ) / 180.0) + needleAngle!)))")
self.composs.transform = CGAffineTransformMakeRotation(CGFloat((Double(compassDirection) ) / 180.0))
print("composs \(CGAffineTransformMakeRotation(CGFloat((Double(compassDirection) ) / 180.0)))")
}
override func viewDidAppear(animated: Bool) {
needleAngle = 0.0
self.locationManger.startUpdatingHeading()
kabahLocation = CLLocation(latitude: 21.42 , longitude: 39.83)
self.locationManger.delegate = self
}
override func viewDidDisappear(animated: Bool) {
self.locationManger.delegate = nil
}
最佳答案
实际上你在这里做错的是让指南针在 didLocationChange 方法中旋转。实际上,您需要根据地球真北进行旋转,为此您需要使用 didUpdateLocationHeader 。这将为您提供根据地球真北的读数。我在下面发布我的代码。您还可以在我的 github 上找到一个完整的工作项目。
import UIKit
import CoreLocation
class ViewController: UIViewController ,CLLocationManagerDelegate{
@IBOutlet weak var ivCompassBack: UIImageView!
@IBOutlet weak var ivCompassNeedle: UIImageView!
let latOfKabah = 21.4225
let lngOfKabah = 39.8262
var location: CLLocation?
let locationManager = CLLocationManager()
var bearingOfKabah = Double()
override func viewDidLoad() {
super.viewDidLoad()
initManager()
}
func initManager(){
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) {
let north = -1 * heading.magneticHeading * Double.pi/180
let directionOfKabah = bearingOfKabah * Double.pi/180 + north
ivCompassBack.transform = CGAffineTransform(rotationAngle: CGFloat(north));
ivCompassNeedle.transform = CGAffineTransform(rotationAngle: CGFloat(directionOfKabah));
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let newLocation = locations.last!
location = newLocation
bearingOfKabah = getBearingBetweenTwoPoints1(location!, latitudeOfKabah: self.latOfKabah, longitudeOfKabah: self.lngOfKabah) //calculating the bearing of KABAH
}
func degreesToRadians(_ degrees: Double) -> Double { return degrees * Double.pi / 180.0 }
func radiansToDegrees(_ radians: Double) -> Double { return radians * 180.0 / Double.pi }
func getBearingBetweenTwoPoints1(_ point1 : CLLocation, latitudeOfKabah : Double , longitudeOfKabah :Double) -> Double {
let lat1 = degreesToRadians(point1.coordinate.latitude)
let lon1 = degreesToRadians(point1.coordinate.longitude)
let lat2 = degreesToRadians(latitudeOfKabah);
let lon2 = degreesToRadians(longitudeOfKabah);
let dLon = lon2 - lon1;
let y = sin(dLon) * cos(lat2);
let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
var radiansBearing = atan2(y, x);
if(radiansBearing < 0.0){
radiansBearing += 2 * Double.pi;
}
return radiansToDegrees(radiansBearing)
}
}
关于ios - 我想在 Swift 中找到朝拜方向(简单的方向指南针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675794/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!