我有一个UIImage,我需要使用白色边框.我不需要UIImageView这个.
你怎么做到这一点?
我是Swift的新手并且有关于回调/闭包的问题.在异步网络呼叫期间,不同的项目在不同的时间到来.我想知道回调如何知道在我们从请求中寻找的所有东西都被执行后才会被执行?
编辑:
dispatch_async(dispatch_get_main_queue(), {
//Array to store HingeImage objects
var myImageArray = Array<HingeImage>()
for items in parsedResult {
//Create custom objects with values needed
let finalObjects = HingeImage(dictionary: items as! [String : AnyObject])
myImageArray.append(finalObjects)
}
// Callback completion
callback(hingeImages: hingeImageArray, error: nil)
})
Run Code Online (Sandbox Code Playgroud)
编辑2:
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
callTheCallBackAndGrabData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func …Run Code Online (Sandbox Code Playgroud) 我搜索了许多链接并阅读了很多文章,但我找不到确切的区别retain和assign..
我正在尝试以下方法:
NSMutableArray *arr1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];
NSMutableArray *arr2=[arr1 retain];
NSMutableArray *arr3 = arr1; //Assign
[arr1 addObject:@"66"];
NSLog(@"Array one : %@",arr1);
NSLog(@"Array two : %@",arr2);
NSLog(@"Array three : %@",arr3);
Run Code Online (Sandbox Code Playgroud)
输出:
Array one : (
1,
2,
3,
66
)
Array two : (
1,
2,
3,
66
)
Array three : (
1,
2,
3,
66
)
Run Code Online (Sandbox Code Playgroud)
以上示例给出了相同的输出.
考虑到上面的例子,我如何定义assign和之间的区别retain?
如果以上示例有错,请提供更好的示例提供答案.
memory-management reference-counting objective-c ios automatic-ref-counting
我正在做的工作,我必须编码和解码UIImage和Base 64字符串).这适用于较小的图像,向前和向后转换只需不到1秒,但当我将其应用于较大的图像时,需要很长时间,几乎一分钟.
是否还有其他方法可以将UIImage对象编码和解码为字符串以将其保存在SQLite数据库中?或者,如果没有其他方法可以改善这一点,我还能做些什么来完成这项工作,我可以摆脱这个问题吗?
这些是我用来完成工作的扩展方法:
extension String {
var toUIImage: UIImage? {
var img = self
img = String(img.characters.map({ $0 == "\r" ? " " : $0 }))
img = String(img.characters.map({ $0 == "\n" ? " " : $0 }))
img = String(img.characters.map({ $0 == "\r\n" ? " " : $0 }))
let dataDecoded:NSData? = NSData(base64EncodedString: img, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
return UIImage(data: dataDecoded!)
}
}
extension UIImage {
var toString: String {
let data = UIImagePNGRepresentation(self)
let encoded …Run Code Online (Sandbox Code Playgroud) 我有两个功能: func Females_NonChat()和func males_NonChat()
我想等他们都在viewDidLoad中执行打印语句之前完成.我需要另一个完成处理程序才能完成吗?
使用的函数是firebase完成处理程序,用于从在线数据库请求信息...
override func viewDidLoad() {
super.viewDidLoad()
func Females_NonChat()
func males_NonChat()
print("finished executing both asynchronous functions")
}
func Females_NonChat(){
Anon_Ref.child("Chatting").child("female").observeSingleEventOfType(.Value, withBlock: {(snapshot) in
if let FemInChatting = snapshot.value as? [String : String] {
print("executing")
}
})
}
func males_NonChat(){
Anon_Ref.child("Chatting").child("male").observeSingleEventOfType(.Value, withBlock: {(snapshot) in
print("executing")
})
}
Run Code Online (Sandbox Code Playgroud) grand-central-dispatch ios completionhandler swift firebase-realtime-database
我正在使用故事板中的一些标准标记,每个标记都有相同的背景色。我遇到的问题是,当segue过渡快要完成时,整个框架周围都会出现像背景这样的深色阴影。

这很微弱,但足以引起问题。有人遇到过吗?
我了解到并发DispatchQueue允许其中的代码立即返回,因此不会阻塞调用线程。这通常与加载大数据的后台任务一起使用。
我还了解到完成处理程序(例如, in URLSession)允许在某些任务完成后执行处理程序中的代码。
我的问题是:这是否意味着并发调度队列和完成处理程序具有重叠的目的?如果我已经使用了完成处理程序,就不需要用并发调度队列包装它吗?
比如下面是一个使用 URLSession 的耗时的数据加载任务,用并发调度队列包装它是不是一个好主意?
URLSession(configuration: URLSessionConfiguration.default).dataTask(with: propertiesRequest) { data, response, error in
// print("within dataTask: data: \(data), response: \(response), error: \(error)")
if let error = error {
print(error)
} else if let httpResponse = response as? HTTPURLResponse {
if httpResponse.statusCode == 200 {
print("success: property task request")
do {
handler(responseDict, nil) // This is a function supplied by caller
} catch let error as NSError {
handler(nil, error)
}
}
}
}
Run Code Online (Sandbox Code Playgroud) concurrency grand-central-dispatch completionhandler nsurlsession swift
现在,我正在尝试使用Git中的一个名为Insomnia的类来防止设备在充电时锁定.如果你好奇的话,这个项目就在这里.对于示例代码,它让我这样做:
final class AppDelegate: UIResponder, UIApplicationDelegate {
private let insomnia = Insomnia(mode: .whenCharging)
//app delegate code
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它已声明AppDelegate为final使得insomnia变量未被释放,这将阻止它工作.但是,我不确定,这是不好的做法宣布我AppDelegate的final?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,有没有更好的方法来确保insomnia不被解除分配?
我的 php 代码在服务器上创建了一个空图像
这是我的代码(swift4):
var encoded_img = imageTobase64(image: image1.image!)
func convertImageToBase64(image: UIImage) -> String {
let imageData = UIImagePNGRepresentation(image)!
return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)
}
Run Code Online (Sandbox Code Playgroud)
代码:
$decodimg = base64_decode(_POST["encoded_img"]);
file_put_contents("images/".$imgname,$decodimg);
Run Code Online (Sandbox Code Playgroud)
以及准备请求的代码:
@IBAction func BtnSend(_ sender: UIButton) {
var url = "http://xxxxxx/msg.php"
var encoded_img = imageTobase64(image: image1.image!)
let postData = NSMutableData(data: ("message=" + message).data(using: String.Encoding.utf8)!)
postData.append(("&encoded_img=" + encoded_img).data(using: String.Encoding.utf8)!)
request = NSMutableURLRequest(url: NSURL(string: url)! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 20.0)
request.httpMethod = "POST"
request.httpBody = postData as Data
let session = URLSession.shared
let …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个为用户绘制对象的应用程序.我现在有一个这样的对象,它是由一个类型的数组构成的[UIBezierPath].然后我使用循环UIBezierPath将数组中的所有s 更改为CGPaths,然后想要逐个绘制那些路径的动画.但是,当我尝试使用此代码时,它不起作用,我无法在网上找到任何有用的信息.这是代码被使用来转换阵列macbookPath它由UIBezierPath成CGPath:
for path in macbookPath {
drawingPath.append(path.cgPath)
}
Run Code Online (Sandbox Code Playgroud)
然后我使用此代码尝试绘制路径:
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
Run Code Online (Sandbox Code Playgroud)
这是函数的其余代码,drawForm()它应该将表单绘制到一个名为的视图上aiDrawView:
@objc func drawForm() {
var drawingPath = [CGPath]()
var macbookPath = Forms.MacbookForm()
let shapeLayer = CAShapeLayer()
shapeLayer.frame = aiDrawView.bounds
for path in macbookPath {
drawingPath.append(path.cgPath)
}
for cgPath in drawingPath {
shapeLayer.path = cgPath
}
let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
strokeEndAnimation.duration = 2.0
strokeEndAnimation.fromValue …Run Code Online (Sandbox Code Playgroud) swift ×8
ios ×6
base64 ×2
objective-c ×2
appdelegate ×1
callback ×1
cashapelayer ×1
cgpath ×1
closures ×1
concurrency ×1
decode ×1
encoding ×1
image ×1
networking ×1
nsurlsession ×1
segue ×1
storyboard ×1
uibezierpath ×1
uiimage ×1