我写了这段代码,效果很好; 但我需要弄清楚CATextLayer中文本的大小才能完成它?我使用轻敲手势来获取x/y的想法,输入文本并让它弄清楚在CATextLayer对象/视图中绘制它所需的CGSize.
overload func ViewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
container.addGestureRecognizer(tap)
}
func handleTap(gesture: UITapGestureRecognizer) {
let location = gesture.location(in: gesture.view)
startX = location.x
startY = location.y
drawText(onLayer: view.layer, fromPoint: CGPoint(x: startX, y: startY), toPoint: CGPoint(x:location.x, y:location.y))
}
func drawText(onLayer layer: CALayer, fromPoint start: CGPoint, toPoint end:CGPoint) {
let myTextLayer = CATextLayer()
myTextLayer.string = "Google"
myTextLayer.backgroundColor = UIColor.black.cgColor
myTextLayer.foregroundColor = UIColor.white.cgColor
//myTextLayer.frame = view.bounds
let myBounds = CGRect(origin: start, size: CGSize(width: 128, height: 32))
myTextLayer.frame = myBounds
layer.addSublayer(myTextLayer) …Run Code Online (Sandbox Code Playgroud) 在大量搜索示例代码之后,管理好一起CKFetchRecordsOperation; 这是......但我一定错过了什么.不要误会我的意思......但......
要执行CKFetchRecordsOperation,您需要一个CKRecordIDs的NSArray; 要获得CKRecordIDs的NSArray,您需要执行CKQuery,您可以构建CKRecordIDs的NSArray.
但是等一下,提取CKRecordIDs的过程使用CKQuery,我可以直接下载CKRecords吗?
如果没有CKQuery,你如何获得CKRecordID的NSArray?
-(void)doSingleBeaconsDownload
{
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:@"iCloud.cqd.ch.BeaconBrowser"] publicCloudDatabase];
NSPredicate *predicatex = [NSPredicate predicateWithFormat:@"iBeaconConfig = %@",iBeaconsConfirmed.giReferenceID];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Running" predicate:predicatex];
[self.delegate performSelectorOnMainThread:@selector(processCompleted:) withObject:@"Downloading Configuration ..." waitUntilDone:YES];
[publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
if (error) {
NSLog(@"Batch Download Error iCloud error %@",error);
}
else {
NSMutableArray *rex2download = [[NSMutableArray alloc] init];
for (CKRecord *rex in results) {
[rex2download addObject:rex.recordID];
}
CKFetchRecordsOperation *fetchRecordsOperation = [[CKFetchRecordsOperation alloc] initWithRecordIDs:rex2download];
/* fetchRecordsOperation.perRecordCompletionBlock = ^(CKRecord *record, …Run Code Online (Sandbox Code Playgroud) Swift 2.0新手; 试图学习它,对动画感兴趣并尝试编写一些代码,一次在屏幕上显示一个消息.
我写了这个,它有效,但是我忍不住可以不用CALayers和/或alpha值做些什么?或者一些有生命的小发明,更快捷的东西; 这种感觉和看起来有点笨重,真的很好.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let supertext = "A long time ago, in a galaxy far, far away ..."
let round = supertext.characters.count
for i in 0...round {
let delay = Double(i)/10
let subtext = supertext[supertext.startIndex..<supertext.startIndex.advancedBy(i)]
NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: "ghostText:", userInfo: ["theText" :subtext], repeats: false)
}
}
var view3:UITextView = UITextView()
func ghostText(timer:NSTimer) {
view3.removeFromSuperview() …Run Code Online (Sandbox Code Playgroud) 这是一个很好的简单的avplayer代码片段,在队列中播放一小部分视频.我的问题.我实际上想在队列中的视频之间暂停.可能吗?
我注意到率两次发射; 状态只会像通知那样触发一次.
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var VideoView: UIView!
var player:AVQueuePlayer = AVQueuePlayer()
@IBAction func NextSlide(sender: AnyObject) {
player.play()
}
override func viewDidLoad() {
func NextSlide(sender: AnyObject) {
}
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let arrayOfPaths: [String] = ["http://192.100.1.1:8080/dino1.mov","http://192.100.1.1:8080/dino1.mov","http://192.100.1.1:8080/dino1.mov"]
var shots = [AVPlayerItem]()
for item in arrayOfPaths {
let url2adopt = NSURL(string: item)
let avAsset = AVURLAsset(URL: url2adopt!)
let shot = AVPlayerItem(asset: …Run Code Online (Sandbox Code Playgroud) iOS 11.x Swift 4
尝试使用新的drop and drag协议实现自定义类,并需要一些超级编码器帮助.我创建了这个类.
import UIKit
import MobileCoreServices
class CustomClass: NSObject, NSItemProviderWriting, NSItemProviderReading {
var image2D:Data?
static var readableTypeIdentifiersForItemProvider = [kUTTypeData as String]
static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
return try self.init(itemProviderData: data, typeidentifier: kUTTypeData as String)
}
required init(itemProviderData data: Data, typeidentifier: String) throws {
super.init()
image2D = data
}
static var writableTypeIdentifiersForItemProvider = [kUTTypeData as String]
func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? { …Run Code Online (Sandbox Code Playgroud) 使用 SFSafariViewController 效果很好,但由于某种原因,当我访问此网页 [knowitall.ch] 时,它会通过打开缩放视图来启动?有一个小黑框,我需要按下它才能获得完整的网页。
我的代码再简单不过了。
if let url = URL(string: url2U) {
let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
vc.delegate = self
present(vc, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
如果我按下该框,我会得到正确的视图,如何对此进行编码,以便我在此处打开第二个视图?不需要黑匣子:)
斯威夫特 5.x iOS 13.x
我创建了一系列骰子视图,我想在它们之间切换。为了简短起见,我在这里仅展示两个视图。我创建了一个视图数组,但我不太清楚如何在 SwiftUI 中解决它?或者实际上视图是什么类型的对象,因为它不是视图或看起来的某种视图。
import SwiftUI
import GameplayKit
let dotSize:CGFloat = 24
let diceSize:CGFloat = 128
let fieldSide:CGFloat = 32
let d6 = GKRandomDistribution.d2()
var diceViews:[Any] = [oneDotDice(),twoDotDice()]
struct ContentView: View {
@State var showInt:Int = 1
var body: some View {
VStack {
if showInt == 1 {
oneDotDice()
.transition(AnyTransition.opacity)
.animation(.default)
.modifier(changeDice(showInt: self.$showInt))
}
if showInt == 2 {
twoDotDice()
.transition(AnyTransition.opacity)
.animation(.default)
.modifier(changeDice(showInt: self.$showInt))
}
}
}
struct oneDotDice: View {
var body: some View { …Run Code Online (Sandbox Code Playgroud) 通过此 appcoder 教程构建文本到语音应用程序教程并运行 swift 1.2-> swift 2.0 功能。
演示项目中有一个类... IOS 10.11.1 下的 Xcode 7.1.1 不喜欢它,给了我错误。覆盖 init() 语句上的“初始化器不会覆盖其超类中的指定初始化器”,后面跟着错误“必须调用超类 UISlider 的指定初始化器”。
好吧,对 Swift 来说还很陌生;我开始解决这个问题的地方让我有点迷失。
class CustomSlider: UISlider {
var sliderIdentifier: Int!
override init() { <--- error here
super.init() <--- error here
sliderIdentifier = 0
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
sliderIdentifier = 0
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码应该说什么?
iOS 13、Swift 5、Xcode 11.3.1
学习 SwiftUI。我把它放在一起,它有效,但它是正确的。
在External.swift 中
class BlobModel: ObservableObject {
@Published var score: String = ""
}
var globalBlob = BlobModel()
Run Code Online (Sandbox Code Playgroud)
在ContentView.swift 中
struct ContentView: View {
@ObservedObject var globalBlob:BlobModel
var body: some View {
Text("\(globalBlob.score)")
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(globalBlob: globalBlob)
}
}
Run Code Online (Sandbox Code Playgroud)
当我在External.swift 中写入 globalBlob 时,它会更新显示。
globalBlob.score = backToString
Run Code Online (Sandbox Code Playgroud)
但是 globalBlob 是一个全局变量,这肯定是糟糕的编码实践。有没有更好的方法我应该这样做?
我正在使用在 iOS 10.0 下运行的 swift 3.0,我想制作一些在满足批处理条件时触发的代码。
for i in 0 ..< rex {
async code, disappears and does it stuff
}
Run Code Online (Sandbox Code Playgroud)
想象一下异步代码是一个 URL 请求的集合,只要我循环它们,基本上就是背景。现在如何在“rex”请求完成后触发更多代码?
我想设置一个计时器来每秒观察和检查,但这肯定不是一个好的解决方案。
我想启动另一个线程来简单地观察正在收集的数据,并在其配额已满时触发,但这确实比计时器更糟糕。
我想在每个 URL 请求的末尾包含一个测试,看看它是否是最后一个完成的而不是使用 NotificationCenter,但这是最佳解决方案吗?
Swift 4,iOS 11.2.5 Xcode 9.2
尝试更改后退按钮的字体。找到了以前尝试过的解决方案,但是在我的配置(选项卡栏控制器内的导航控制器)下,似乎在Swift 4,iOS 11.2.5下都无法正常工作。
得到此代码后,第一行和最后一行有效,但中间的三行无效。
self.navigationController?.navigationBar.titleTextAttributes = [ NSAttributedStringKey.font: UIFont(name: "AvenirNextCondensed-DemiBoldItalic", size: 20)!]
navigationItem.backBarButtonItem?.setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "AvenirNextCondensed-DemiBoldItalic", size: 20)!], for: .normal)
navigationItem.backBarButtonItem?.setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "AvenirNextCondensed-DemiBoldItalic", size: 20)!], for: .highlighted)
navigationItem.backBarButtonItem?.setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "AvenirNextCondensed-DemiBoldItalic", size: 20)!], for: .focused)
navigationItem.title = "Filter \(titleSelection!) [shake to clear]"
Run Code Online (Sandbox Code Playgroud)
这是viewDidLoad方法。应该行吗?
需要反转一个快速的字符串,设法这样做.
var str = "Hello, playground"
let reactedText = str.characters.reversed()
let nowBackwards = Array(reactedText)
let answer = String(nowBackwards)
Run Code Online (Sandbox Code Playgroud)
而且由于我在主题中没有找到任何内容,我发布了一些积极的投票:)或者确实是更好的[更短,如同在不同的解决方案].
swift ×12
ios ×9
swiftui ×2
alamofire ×1
avfoundation ×1
avkit ×1
avplayer ×1
calayer ×1
catextlayer ×1
ckrecord ×1
cloudkit ×1
combine ×1
fonts ×1
graphics ×1
nsoperation ×1
nsurl ×1
objective-c ×1
sfsafariviewcontrollerdelegate ×1
speech ×1
string ×1
swift3 ×1
uitextview ×1
uiview ×1
view ×1