0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

ListView内のImageViewをanimateする方法

yhiroki
yhiroki 30

投稿日:2014-11-20 04:38:02

主にiOS向け。
Titanium SDK 3.4.0使用。

ListViewについて。
ItemTemplateのchildTemplatesを用いてImageViewを表示したとします。
ユーザーが何らかのアクションをした際に、このImageViewをanimateしたいと思ったのですが、実現する方法が見つけられません。

ImageView自身がクリックされた際などにタイミングを限定すれば、

{
    bindId: 'image',
    type: 'Ti.UI.ImageView',
    properties: {
        image: 'hoge.png',
        width: 50,
        height: 50,
    },
    events: {
        click: function(e){
            this.animate({width:0});
        },
    },
}

という形で実現できたのですが、例えば他のViewがクリックされた際にこのImageViewをanimateさせる方法がわかりません(このImageViewへの参照を見つけることができない)。

何らかの方法はありますでしょうか?

何卒よろしくお願いいたします。



回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

1

Thumbsdown

うーん



はい、参照は出来なくなっています。しばらくtemplateにImageViewを入れてそこにonLoadイベントを追加して試してみましたが、うまく動作しませんでした。

      <ListView top="20" id="listView" defaultItemTemplate="template">
        <Templates>
          <ItemTemplate name="template">
            <ImageView bindId="pic" id="icon" onLoad="register" />
          </ItemTemplate>
        </Templates>
        <ListSection id="section">
        </ListSection>
      </ListView>

このregisterで

var views = [];
function register(e){
  views.push(e);
}

とすれば登録されるかと思ったのですが、そう簡単には問屋もビジネスしてくれません。TableViewなら簡単ですが、行数が多い場合はおすすめできません。

<TableView id="table">
</TableView>

controller側はこんな感じで
var views = [];

function transform(e){
  for(var key in views){
    if(views[key].item_id == e){
      views[key].animate({width: 0});
    }
  }
}

function hideImage(n) {//外から呼び出すfunction
  transform(n);
}

$.index.addEventListener('open', function(){
  var items = [];
  for(var i = 1; i < 10; i++){
    var row = Ti.UI.createTableViewRow({
      item_id: i
    });
    var image = Ti.UI.createImageView({
      item_id: i,
      image : 'appicon' + i + '.png',
      className: 'icon'
    });
    views.push(image);
    row.add(image);
    $.table.appendRow(row);
  }
});
$.table.addEventListener('click', function(e){
  transform(e.row.item_id);
});

やはりListViewではできないのですね。ItemTemplateが便利なので気に入っていたのですが。。それではこの手の箇所はTableViewで実装することにします。ご丁寧にありがとうございました! --- yhiroki

ログインすると回答することができます。