Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中添加图像过渡动画_Ios_Animation_Swift_Uiimage_Transition - Fatal编程技术网

Ios 在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

下面是每5秒自动在不同图像之间转换的代码。我想为过渡添加动画,如淡入淡出、从左滚动等。我将如何在Swift中执行此操作?谢谢

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
}