我目前正在将 MKPolyline 转换为 BezierPath,然后转换为 CAShapeLayer,然后将该图层作为子图层添加到 UIView。目前正在努力确保路径不会绘制在 UIView 的边界之外。我不想遮盖并使部分路径消失,而是确保调整每个点的大小并将其放置在 UIView 的中心。
func addPathToView() {
guard let path = createPath(onView: polylineView) else { return }
path.fit(into: polylineView.bounds).moveCenter(to: polylineView.center).fill()
path.lineWidth = 3.0
path.lineJoinStyle = .round
guard let layer = createCAShapeLayer(fromBezierPath: path) else { return }
layer.path = getScaledPath(fromPath: path, layer: layer)
layer.frame = polylineView.bounds
layer.position.x = polylineView.bounds.minX
layer.position.y = polylineView.bounds.minY
polylineView.layer.addSublayer(layer)
}
func createCAShapeLayer( fromBezierPath path: UIBezierPath? ) -> CAShapeLayer? {
guard let path = path else { print("No Path"); return nil } …
Run Code Online (Sandbox Code Playgroud) 我想在谷歌地图视图中拟合折线.折线是通过google地图方向api中的overview_polyline获得的.
想知道如何将编码的折线转换成可以使用的东西.我需要在地图视图中拟合折线.我发现要做的就是适合显示所有标记但不显示整个折线的边界.
func fitAllMarkers()
{
var bounds = GMSCoordinateBounds()
for marker in markers
{
bounds = bounds.includingCoordinate(marker.position)
}
googleMapView.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds))
}
Run Code Online (Sandbox Code Playgroud) 目前我正在 MKMapView 上跟踪我的位置。我的目标是绘制一条与从跟踪位置创建的 MKPolyline 相同的贝塞尔路径。
我尝试过的是:将所有位置坐标存储在 CLLocation 数组中。迭代该数组并将纬度/经度坐标存储在 CLLocationCooperative2D 数组中。然后确保折线位于屏幕视图中,然后转换 CGPoints 中的所有位置坐标。
目前的尝试:
@IBOutlet weak var bezierPathView: UIView!
var locations = [CLLocation]() // values from didUpdateLocation(_:)
func createBezierPath() {
bezierPathView.isHidden = false
var coordinates = [CLLocationCoordinate2D]()
for location in locations {
coordinates.append(location.coordinate)
}
let polyline = MKPolyline(coordinates: coordinates, count: coordinates.count)
fitPolylineInView(polyline: polyline)
let mapPoints = polyline.points()
var points = [CGPoint]()
for point in 0...polyline.pointCount
{
let coordinate = MKCoordinateForMapPoint(mapPoints[point])
points.append(mapView.convert(coordinate, toPointTo: polylineView))
}
print(points)
let path = UIBezierPath(points: points)
path.lineWidth …
Run Code Online (Sandbox Code Playgroud) 在 SwiftUI 中,似乎有两个选项可用于修改列表的颜色。
设置列表的行背景颜色
List {
ForEach(elements, id:\.self) { element in
}.listRowBackground(Color.blue)
}
Run Code Online (Sandbox Code Playgroud)
将列表的配色方案设置为“浅色”或“深色”
List {
ForEach(elements, id:\.self) { element in
}
}.colorScheme(.light) // .dark
Run Code Online (Sandbox Code Playgroud)
设置其他属性,如背景、前景色等......似乎对感兴趣的视图颜色的影响为零。
目前,我确实将列表嵌入到导航视图中,如下所示:
NavigationView {
List {
ForEach(elements, id:\.self) { element in
}
}.colorScheme(.light) // .dark
}
Run Code Online (Sandbox Code Playgroud)
但同样,没有颜色设置或视图层次结构设置似乎能够将背景视图设置为清晰/透明,因此主视图的颜色可以作为驱动程序。相反,从实验看来,我们被迫选择白色或黑色背景。这是 swift 或 Xcode 的 bug 还是有可用的解决方案?
更新到Xcode 9并在模拟器上进行编译的“启动”阶段,我得到了错误:
无法为应用程序捆绑包ID创建IXPlaceholder
仅在尝试启动模拟器时才会强调此问题,因为使用我的实际iPhone 6s可以正常启动。
尝试次数:
确保info.plist“捆绑包标识符”正确。它是“ $(PRODUCT_BUNDLE_IDENTIFIER)”
检查手动输入包标识符是否可行,但没有成功。
项目清理
删除衍生数据
重新启动Xcode
电脑重启
Xcode Beta已卸载
Xcode卸载并重新安装
供应配置文件将于11个月后过期
取消选中“自动管理签名”,然后再次检查
付费开发人员已有2年了,以前从未遇到过此问题。在网上搜索了没有运气的解决方案,并且注意到只有其他几个人遇到了这个问题,但没有明确的解决方案。
我应该采取什么方向解决此问题。我没有看到预配文件/证书有什么问题,但是如果有人可以向正确的方向指导我,那我可能是错的。
谢谢
在阅读完Google Places文档后,placesClient给出了一个保留nil值的错误,我读了以下语句:
此类应通过[GMSPlacesClient sharedClient]方法访问。
我想知道如何实现sharedClient方法,以便基于placesID来搜索给定位置上的信息?
var placesClient: GMSPlacesClient!
func lookUpPlaceID() {
let placeID = "ChIJPXw5JDZM6IAR4rTXaFQDGys"
//What value should placesClient be holding if not GMSPlacesClient in order to run the search based on the placeID?
self.placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in
if let error = error {
print("lookup place id query error: \(error.localizedDescription)")
return
}
if let place = place {
print("Place name \(place.name)")
print("Place address \(place.formattedAddress)")
print("Place placeID \(place.placeID)")
print("Place attributions \(place.attributions)")
} else {
print("No place details …
Run Code Online (Sandbox Code Playgroud) 我看过 2016 年关于 Core Data 的 WWDC 视频并查看了各种教程。我已经看到了使用 Core Data Framework 创建对象以持久化到 managedObjectContext 的各种方法。
在示例中,我将其Day
作为一个实体。我想Day
为用户使用该应用程序的每一天创建一个新对象。
我遇到过:
第一个选项
let entity = NSEntityDescription.insertNewObject(forEntityName: "Day", into: CoreDataHelper.context)
let object = NSManagedObject(entity: entity, insertInto: CoreDataHelper.context)
Run Code Online (Sandbox Code Playgroud)
第二个选项
let object = Day(entity: Day.entity(), insertInto: CoreDataHelper.context)
Run Code Online (Sandbox Code Playgroud)
第三个选项
let object = Day(context: CoreDataHelper.context)
Run Code Online (Sandbox Code Playgroud)
并且知道人们还提出了其他可能性。
最下面的两个选项有什么区别,因为我在 WWDC 视频中没有看到第二个选项的演示。第三个选项是自动插入到 managedObjectContext 中还是应该采取某种方法将对象插入上下文中,然后使用 NSFetchedResultsController 检索所有对象。
将 CIFilter 应用于相机拍摄的照片后,拍摄的图像会缩小并重新定位。
我在想,如果我能够获得原始图像的大小和方向,它会相应地缩放并将图像视图固定到屏幕的角落。但是,这种方法没有任何改变,并且不知道我可以正确地将图像缩放到屏幕的全尺寸的方法。
func applyBloom() -> UIImage {
let ciImage = CIImage(image: image) // image is from UIImageView
let filteredImage = ciImage?.applyingFilter("CIBloom",
withInputParameters: [ kCIInputRadiusKey: 8,
kCIInputIntensityKey: 1.00 ])
let originalScale = image.scale
let originalOrientation = image.imageOrientation
if let image = filteredImage {
let image = UIImage(ciImage: image, scale: originalScale, orientation: originalOrientation)
return image
}
return self.image
}
Run Code Online (Sandbox Code Playgroud)
图片说明:图片截取并截屏,图片缩小后留空。
目前我正在尝试创建一个3 ... 2 ... 1 ... Go!Go之后的倒计时类型!声明发生了一个动作但是使用完成处理程序的选项Timer.scheduleTimer
没有能力从我理解的倒计时?
截至目前,我可以从3倒数,但不知道如何在Go中使计时器无效!并执行一个动作
var seconds = 3
var countDownTimer = Timer()
func startCountDown() {
countDownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(TrackActivityVC.updateTimer), userInfo: nil, repeats: true)
}
func updateTimer() {
seconds -= 1
print(seconds)
}
// Not sure how to use this code to create a countdown, as it doesn't seem possible with this method
Timer.scheduledTimer(withTimeInterval: someInterval, repeats: false) {
}
Run Code Online (Sandbox Code Playgroud)
因此问题是如何使用完成处理程序使倒计时器.
我面临的问题是,当我按下UIButton时 - 需要位置服务来启动操作.但是,如果用户在应用程序的初始启动时拒绝定位服务 - 应用程序将崩溃.
我试图找到一种方法来实现CLAuthorizationStatus .Denied但我似乎无法找到一种方法.我似乎可以实现的唯一代码是didChangeAuthorizationStatus,它只在应用程序的首次启动时启动请求.
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus)
{
if status == .AuthorizedAlways || status == .AuthorizedWhenInUse
{
manager.startUpdatingLocation()
}
else
{
manager.requestWhenInUseAuthorization()
}
}
Run Code Online (Sandbox Code Playgroud)
如果我按下UIButton发送API请求,如果位置服务被拒绝,应用程序将崩溃.
我的问题是如何在按钮的IBAction中实现一个方法,该方法将指导用户转到他们的设置并启用位置服务.:)
我有一个带有对象的 tableView,该对象TaskCell
是UITableViewCell
的textView
是在TaskCell
一切工作正常,除了我不能让这行代码的文本视图,选择所有文字,以便用户可以立即覆盖的文本,如果他们愿意的话。就像您在按住文本后点击“全选”一样。
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.endOfDocument)
Run Code Online (Sandbox Code Playgroud)
_
// All code relating to textView
class TaskCell: UITableViewCell {
@IBOutlet weak var textView: UITextView! { didSet { initTextView() } }
fileprivate func initTextView() {
textView.delegate = self
}
}
extension TaskCell: UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.endOfDocument)
}
}
// class ListViewController: ViewController, UITableViewDataSource, UITableViewDelegate
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { …
Run Code Online (Sandbox Code Playgroud) 我一直在使用谷歌地图sdk和地方api完全正常.昨天我的代码运行得很好.但今天早上醒来,做了一些修改,然后遇到了一个问题的编译雪球,似乎很容易解决,但花了几个小时试图弄清楚发生了什么.我正在尝试开发一个iPhone应用程序.
我已经回去了,在开发者控制台中创建了一个"新项目",重新生成了一个新的iOS密钥.在info.plist中输入新的包ID,在委托文件中输入新的api密钥,并在url的搜索参数内输入.
我正在使用alamofire和swiftyjson来解析数据
但仍然得到同样的问题.
2016-01-28 13:15:55.683适用于iOS版的Google Maps SDK:1.11.21919.0
{"error_message":"此IP,站点或移动应用程序无权使用此API密钥.从IP地址"myIPAddress"收到请求,空引用","结果":[
],"status":"REQUEST_DENIED","html_attributions":[
]}
func downloadRestaurantDetails(completed: DownloadComplete) {
let URL_Search = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?"
let API_iOSKey = "My iOS API Key"
let urlString = "\(URL_Search)location=\(clLatitude),\(clLongitude)&radius=\(searchRadius)&types=\(searchType)&key=\(API_iOSKey)"
let url = NSURL(string: urlString)!
Alamofire.request(.GET,url).responseJSON { (response) -> Void in
if let value = response.result.value {
let json = JSON(value)
print(json)
if let results = json["results"].array {
for result in results {
if let placeIDs = result["place_id"].string {
self.placeIDArray.append(placeIDs)
}
}
}
}
completed()
}
}
Run Code Online (Sandbox Code Playgroud) 问题:我想为固定大小的字符串数组的元素分配内存,但是,我遇到崩溃的机会是75%。
那是我的程序完美运行的25%的时间,但是错误是我以前从未遇到过的错误
#define PACKAGE_COUNT 60
#define MAX_COUNT 5
const char *colors[] = { "blue", "red", "yellow", "purple", "orange" };
char **generatePackage() {
char **generatedPackage = malloc(PACKAGE_COUNT);
int randomIndex = 0;
for (int i = 0; i <= PACKAGE_COUNT; ++i) {
randomIndex = rand() / (RAND_MAX / MAX_COUNT + 1);
generatedPackage[i] = malloc(sizeof(char) * sizeof(colors[randomIndex]));
// ERROR
strcpy((generatedPackage[i]), colors[randomIndex]);
// printf("generatePackage - %d: %s \n", i + 1, generatedPackage[i]);
}
return generatedPackage;
}
Run Code Online (Sandbox Code Playgroud)