Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

Titanium Mobile(ver 3系)でImageViewにaddしたViewのパラメータが反映されなくて困った

Titanium Mobileを久しぶりに使ってみたところちょっとはまったのでメモ。
本当に使ってなかったので、SDKのバージョンが2系から3系になっていた。

久しぶりに起動してみたのは、このアプリ。実はTitanium製。
https://itunes.apple.com/jp/app/baburudekoreta/id741537396?mt=8&at=10l8JW&ct=hatenablog

円形にかたどったViewをImageViewに重ねて置いていって
最後にそれを画像として保存するような処理をしているのだけど、なぜか円形のパラメータが正常に渡されない。
(バブルデコレータでは、円でくりぬいた画像を重ねて水玉コラを作っている)

かなり適当に書いてるが、こんな感じで書くと、
over_viewに指定した、left, top, width, heightの値が反映されず、leftとtopは0、widthとheightは親(base_image_view)と同じものにセットされた。

(snip)
  // ベースになるimageViewを作る
  // imageは加工対象の画像
  var base_image_view = Ti.UI.createImageView({
    width: image.width,
    height: image.height,
  });

  // 上に重ねるView、パラメータは適当
  var over_view = Titanium.UI.createView({
      left: left_para,,
      top: top_param,
      width: width_param,
      height: height_param,
      borderRadius: radius_param,
  });
  base_image_view.add(over_view);
(snip)

ちょっと原因が分からなかったが、色々と試していると、
base_image_viewをImageViewではなく、Viewにするとちゃんと反映される事がわかった。
これは仕様なのか、使い方を間違えているのかちょっとわからないけどひとまず良しとする。

ちなみに、ImageViewにしていたのは、

  base_image_view.toImage().imageAsCropped({});

を使いたかったからだけど、ViewでもtoImageは使えるみたいだった。
結構時間潰したのにあんまり納得いくような解決策じゃなくてちょっと悔しい。