Ios 钛合金ImageView动画宽度和高度

Ios 钛合金ImageView动画宽度和高度,ios,animation,imageview,titanium,Ios,Animation,Imageview,Titanium,我尝试用钛合金创建ImageView,如下所示: var animationView = Titanium.UI.createImageView ( { images:animationImages, duration:50, repeatCount:0, width: '90dp', height: '270dp' } ); function Animation(data) { var w

我尝试用钛合金创建ImageView,如下所示:

var animationView = Titanium.UI.createImageView
(
    {
        images:animationImages,
        duration:50,
        repeatCount:0,
        width: '90dp',
        height: '270dp'
    }
);
function Animation(data)
{
    var width = data.hasOwnProperty("width") ? data.width : Ti.UI.SIZE;
    var height = data.hasOwnProperty("height") ? data.height: Ti.UI.SIZE;
    var duration = data.hasOwnProperty("duration") ? data.duration : 50;
    var imageFiles = data.hasOwnProperty("images") ? data.images : [];

    var images = [];

    var container = Ti.UI.createView
    (
        {
            width:width,
            height: height
        }
    );

    for(var i=0; i<imageFiles.length; i++)
    {
        var image = Ti.UI.createImageView
        (
            {
                image:imageFiles[i],
                width:width,
                height:height
            }
        );

        if(i!=0)
            image.setVisible(false);

        container.add(image);
        images.push(image);
    }

    container.activeImage = 0;
    container.intervalId = null;

    container.setActiveImage = function(index)
    {
        if(container.intervalId == null)
            container.activeImage = index;
    }

    container.start = function()
    {
        var callback = function()
        {
            for(var i=0; i<images.length; i++)
            {
                if(i == container.activeImage)
                    images[i].setVisible(true);
                else
                    images[i].setVisible(false);
            }

            container.activeImage = (container.activeImage + 1) % images.length;
        }

        container.intervalId = setInterval ( callback, duration );
    }

    container.stop = function()
    {
        clearInterval(container.intervalId);
        container.intervalId = null;
    }

    return container;
}

module.exports = Animation;
var Animation = require('...path to your animation file');
var myAnimation = new Animation
(
    {
        width:'100dp',
        height:'100dp',
        duration:50, //duration while one frame is showing
        images:['one.png', 'two.png'...], //full paths
    }
);

//start:
myAnimation.start();

//stop
myAnimation.stop();

在安卓系统上,它的大小和预期的一样,但在IOS系统上,它根本无法缩放。有什么事吗,我做错了?或者我应该一帧一帧地手动创建图像视图,然后用
setInterval
更改它们?

这实际上不是一个一致的解决方案,它应该是一个注释,但由于我没有足够的代表,我不得不将其作为一个答案来写

首先,我会尝试给它一个顶部和左侧属性。 其次,这些图像是从远程URL检索的吗?远程URL仅在Android中受支持。如果是这样的话,你可以像你在问题中说的那样做一个变通办法


最后,“dp”只适用于android,因此它在iOS中根本不会缩放,它将简单地删除“dp”并将数字用作“点”,在非视网膜屏幕上,像素数相同,在视网膜显示器上,像素数将加倍。

我最终决定创建自己的动画类,如下所示:

var animationView = Titanium.UI.createImageView
(
    {
        images:animationImages,
        duration:50,
        repeatCount:0,
        width: '90dp',
        height: '270dp'
    }
);
function Animation(data)
{
    var width = data.hasOwnProperty("width") ? data.width : Ti.UI.SIZE;
    var height = data.hasOwnProperty("height") ? data.height: Ti.UI.SIZE;
    var duration = data.hasOwnProperty("duration") ? data.duration : 50;
    var imageFiles = data.hasOwnProperty("images") ? data.images : [];

    var images = [];

    var container = Ti.UI.createView
    (
        {
            width:width,
            height: height
        }
    );

    for(var i=0; i<imageFiles.length; i++)
    {
        var image = Ti.UI.createImageView
        (
            {
                image:imageFiles[i],
                width:width,
                height:height
            }
        );

        if(i!=0)
            image.setVisible(false);

        container.add(image);
        images.push(image);
    }

    container.activeImage = 0;
    container.intervalId = null;

    container.setActiveImage = function(index)
    {
        if(container.intervalId == null)
            container.activeImage = index;
    }

    container.start = function()
    {
        var callback = function()
        {
            for(var i=0; i<images.length; i++)
            {
                if(i == container.activeImage)
                    images[i].setVisible(true);
                else
                    images[i].setVisible(false);
            }

            container.activeImage = (container.activeImage + 1) % images.length;
        }

        container.intervalId = setInterval ( callback, duration );
    }

    container.stop = function()
    {
        clearInterval(container.intervalId);
        container.intervalId = null;
    }

    return container;
}

module.exports = Animation;
var Animation = require('...path to your animation file');
var myAnimation = new Animation
(
    {
        width:'100dp',
        height:'100dp',
        duration:50, //duration while one frame is showing
        images:['one.png', 'two.png'...], //full paths
    }
);

//start:
myAnimation.start();

//stop
myAnimation.stop();

谢谢你的回答,我最终决定一帧一帧地创建动画,一次只显示一个图像。这太棒了。非常感谢你。我还没有试过,但是你有没有性能问题?我在考虑使用视图而不是ImageView,我的另一个想法是只使用一个图像并更改backgroundImage属性。还有一件事。您的代码似乎会重复动画,直到取消为止。我还考虑为循环添加一个参数。无论如何,我会在接下来的几天里尝试所有这些方法并公布结果。非常感谢。@Leonardo我认为,这不是最有利于性能的事情,但它完成了任务:)当我有时间时,我会再次研究它,并添加循环。我很高兴,你喜欢它!