3

touchmove イベントが発生したときに、Titanium iPhone アプリケーションで globalPoint を取得しようとしています。次のコードを使用して globalPoint を取得します。

var x = parseInt(e.globalPoint.x, 10);

Titanium 3.0.2 GA を 3.1.0 GA に更新するまで問題なく動作し、更新後にアプリケーションを実行すると次のエラーが発生しました

「未定義」はオブジェクトではありません (「e.globalPoint.x」を評価します)

ウィンドウをスワイプするためにこのコードを使用しています

var animateLeft = Ti.UI.createAnimation({
    left : 250,
    curve : Ti.UI.ANIMATION_CURVE_EASE_OUT,
    duration : 150
});

var animateRight = Ti.UI.createAnimation({
    left : 0,
    curve : Ti.UI.ANIMATION_CURVE_EASE_OUT,
    duration : 150
});

var touchStartX = 0;
var touchStarted = false;

$.innerwin.addEventListener('touchstart', function(e) {
    touchStartX = parseInt(e.x, 10);
});

$.innerwin.addEventListener('touchend', function(e) {
    touchStarted = false;
    if ($.win.left >= 150) {
        $.win.animate(animateLeft);
        hasSlided = true;
    } else {
        $.win.animate(animateRight);
        hasSlided = false;
    }
});

$.innerwin.addEventListener('touchmove', function(e) {
    var x = parseInt(e.globalPoint.x, 10);
    var newLeft = x - touchStartX;
    if (touchStarted) {
        if (newLeft <= 250 && newLeft >= 0) {
            $.win.left = newLeft;
        }
    }
    if (newLeft > 30) {
        touchStarted = true;
    }
});

$.button.addEventListener('singletap', function(e) {
    $.toggleSlider();
});

var hasSlided = false;
exports.toggleSlider = function() {
    if (!hasSlided) {
        $.win.animate(animateLeft);
        hasSlided = true;
    } else {
        $.win.animate(animateRight);
        hasSlided = false;
    }
}
4

2 に答える 2

3

これは廃止されました:

代わりに、これを行う必要があり (この非常に不自然な例では)、convertPointToViewメソッドを使用します。

var baseview = Ti.UI.createView({width : Ti.UI.FILL, height : Ti.UI.FILL});
var view = Ti.UI.createView({ width : 20, height : 20 });
view.addEventListener('touchmove', function(e) {
    var globalPoint = convertPointToView({x : e.x, y : e.y}, baseview);
});
于 2013-05-16T15:07:51.810 に答える