Ios 在Swift中添加图像过渡动画
下面是每5秒自动在不同图像之间转换的代码。我想为过渡添加动画,如淡入淡出、从左滚动等。我将如何在Swift中执行此操作?谢谢Ios 在Swift中添加图像过渡动画,ios,animation,swift,uiimage,transition,Ios,Animation,Swift,Uiimage,Transition,下面是每5秒自动在不同图像之间转换的代码。我想为过渡添加动画,如淡入淡出、从左滚动等。我将如何在Swift中执行此操作?谢谢 class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() imageView.animationImages = [ UIIma
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.animationImages = [
UIImage(named: "brooklyn-bridge.jpg")!,
UIImage(named: "grand-central-terminal.jpg")!,
UIImage(named: "new-york-city.jpg")!,
UIImage(named: "one-world-trade-center.jpg")!,
UIImage(named: "rain.jpg")!,
UIImage(named: "wall-street.jpg")!]
imageView.animationDuration = 25.0
imageView.startAnimating()
}
类ViewController:UIViewController{
@IBVAR imageView:UIImageView!
让图像=[
UIImage(名为:“brooklyn bridge.jpg”)!,
UIImage(名为:“grand central terminal.jpg”)!,
UIImage(名称:“new york city.jpg”),
UIImage(名为:“one world trade center.jpg”)!,
UIImage(名为:“rain.jpg”)!,
UIImage(名为:“wall street.jpg”)!]
var指数=0
让动画持续时间:NSTimeInterval=0.25
让切换间隔:NSTimeInterval=3
重写func viewDidLoad(){
super.viewDidLoad()
imageView.image=图像[index++]
animateImageView()
}
func animateImageView(){
CATransaction.begin()
CATransaction.setAnimationDuration(animationDuration)
CATransaction.setCompletionBlock{
设延迟=调度时间(现在调度时间,Int64(self.switchingInterval*NSTimeInterval(NSEC\u/秒)))
调度\u之后(延迟、调度\u获取\u主队列()){
self.animateImageView()
}
}
let transition=cattransition()
transition.type=kCATransitionFade
/*
transition.type=kCATransitionPush
transition.subtype=kCATransitionFromRight
*/
imageView.layer.addAnimation(转换,forKey:kCATransition)
imageView.image=图像[索引]
CATransaction.commit()
索引=索引
将其实现为自定义图像视图会更好。这里有一个独立的类,您可以使用它来设置图像更改的动画和淡入淡出动画
class FadeImageView: UIImageView
{
@IBInspectable
var fadeDuration: Double = 0.13
override var image: UIImage?
{
get {
return super.image
}
set(newImage)
{
if let img = newImage
{
CATransaction.begin()
CATransaction.setAnimationDuration(self.fadeDuration)
let transition = CATransition()
transition.type = kCATransitionFade
super.layer.add(transition, forKey: kCATransition)
super.image = img
CATransaction.commit()
}
else {
super.image = nil
}
}
}
}
基于Swift 3中的动画代码
let animationDuration: TimeInterval = 0.25
let switchingInterval: TimeInterval = 3
func animateImageView()
{
CATransaction.begin()
CATransaction.setAnimationDuration(animationDuration)
CATransaction.setCompletionBlock {
DispatchQueue.main.asyncAfter(deadline: .now() + self.switchingInterval) {
self.animateImageView()
}
}
let transition = CATransition()
transition.type = kCATransitionFade
/*
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
*/
imageView.layer.add(transition, forKey: kCATransition)
imageView.image = images.object(at: index) as! UIImage
CATransaction.commit()
index = index < images.count - 1 ? index + 1 : 0
}
let animationDuration:TimeInterval=0.25
let switchingInterval:TimeInterval=3
func animateImageView()
{
CATransaction.begin()
CATransaction.setAnimationDuration(animationDuration)
CATransaction.setCompletionBlock{
DispatchQueue.main.asyncAfter(截止日期:.now()+self.switchingInterval){
self.animateImageView()
}
}
let transition=cattransition()
transition.type=kCATransitionFade
/*
transition.type=kCATransitionPush
transition.subtype=kCATransitionFromRight
*/
imageView.layer.add(transition,forKey:kCATransition)
imageView.image=images.object(at:index)为!UIImage
CATransaction.commit()
索引=索引
@LeonardoSavioDabus,我想那是因为你把你的图像放在了资产目录中。因此,如果我将其放在resources文件夹中,我可能必须像这样使用,将图像放在资产目录中是好的,但是如果您将JPEG图像直接放在捆绑包中,则在创建UIImage
时必须具有扩展名。顺便说一句,PNG文件没有这个问题。可能是因为我使用了@2x.PNG文件如何为分派的任务添加回调函数?我将此类添加到UIImageView并使用该动画,但它不使用自定义转换。我将图像添加到animationImages,并将视图告知startAnimating(),但它不是自定义动画。那么我做错了什么?没有代码,我不知道问题出在哪里。如果可以,请粘贴您编写的代码,我会看看有什么问题。我用您的代码创建了一个新类,并将其添加到Interface builder中的UIImageView中。我添加了一个@ibvar slidemageview:FadeImageView代码>。在我的ViewController中,我尝试使用以下代码启动动画:slideImageView.animationImages=[UIImage(名为:“image1”)!、UIImage(名为:“image2”)!、UIImage(名为:“image3”)、UIImage(名为:“image4”)!]slideImageView.animationDuration=25.0 slideImageView.startAnimating()
我希望这有帮助…UIImageView animationImages不支持更改动画。看一看,您应该使用自定义动画。
let animationDuration: TimeInterval = 0.25
let switchingInterval: TimeInterval = 3
func animateImageView()
{
CATransaction.begin()
CATransaction.setAnimationDuration(animationDuration)
CATransaction.setCompletionBlock {
DispatchQueue.main.asyncAfter(deadline: .now() + self.switchingInterval) {
self.animateImageView()
}
}
let transition = CATransition()
transition.type = kCATransitionFade
/*
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
*/
imageView.layer.add(transition, forKey: kCATransition)
imageView.image = images.object(at: index) as! UIImage
CATransaction.commit()
index = index < images.count - 1 ? index + 1 : 0
}