我有view controller
互动转换的自定义动画师。根据转换进度,还有blur effect
设置为nil
。效果的动画代码如下:
@objc func blurEffectDissmisal() {
UIView.animate(withDuration: dismissAnimator.durationOfAnimation + 1, animations: {
self.blurEffectView?.effect = nil
}) { (done) in
if (done) {
self.blurEffectView?.removeFromSuperview()
}
}
}
我用notification
来调用它,当它从第一个view controller
转换到第一个import io
import os
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types
# Instantiates a client
client = vision.ImageAnnotatorClient()
# The name of the image file to annotate
file_name = os.path.join(
os.path.dirname(__file__),
'face.jpeg')
# Loads the image into memory
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = types.Image(content=content)
response = client.annotate_image({'image': image, 'features': [{'type': vision.enums.Feature.Type.FACE_DETECTION,'max_results':40}],})
print response
# Print joy likelihood
for face in response.face_annotations:
print(face.joy_likelihood)
时,会调用它。
但是,我有一个问题。在动画结束之前调用完成块。当我第一次运行转换(没有取消它)时它工作正常,但在子结果运行期间它没有。
我还尝试将动画添加到我的动画师中,但它也没有成功。
此外,当我取消转换时,在实际动画结束之前调用完成块(在这种情况下,我理解为什么但是不能弄清楚如何让它向后移动。也许我应该创建一个反向动画在完成区?)
我已经尝试过这个answer的建议,但是没有帮助。
如果你知道如何解决这个问题,我将非常感谢你的帮助。
答案 0 :(得分:1)
在调用动画函数之前使用延迟。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
UIView.animate(withDuration: 2.0,delay: 0, animations: {
self.frame.origin.x = -2000
}) { (done) in
if(done){
self.removeFromSuperview()
}
}
}
答案 1 :(得分:0)
UIView.animate(withDuration: 1, animations: {
self.blurEffectView?.frame = CGRect(x: self.blurEffectView?.frame.origin.x, y: self.view.frame.size.height, width: self.blurEffectView?.frame.size.width, height: self.blurEffectView?.frame.size.height)
}, completion: {
(value: Bool) in
self.blurEffectView?.removeFromSuperview()
})
使用相同的动画(在UIView上)我能够做到这一点:
答案 2 :(得分:0)
我创建了一个游乐场,您可以在其中查看此更改,只需创建新的游乐场,单击助手编辑器(左上角,两个连接的圆圈)并查看动画。这应该做。
import PlaygroundSupport
import UIKit
let rect = CGRect(x: 0, y: 0, width: 40, height: 40)
let view = UIView(frame: rect )
view.backgroundColor = UIColor.yellow
let label = UILabel(frame: rect)
label.text = "A"
label.textAlignment = .center
view.addSubview(label)
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
PlaygroundPage.current.liveView = view
UIView.animate(withDuration: 4, animations: {
blurEffectView.alpha = 0
}) { (done) in
if (done) {
blurEffectView.removeFromSuperview()
}
}
你面临的问题不是UIView.animate没有做到这一点,只是因为你将视图设置为nil是不可动画的。想象一下,删除某些东西可以动画......