【问题标题】:Properly remove a scrollView in Corona SDK正确删除 Corona SDK 中的滚动视图
【发布时间】:2015-09-19 05:52:14
【问题描述】:

在我的游戏中,我在一个函数中声明了一个滚动视图小部件,我想使用另一个函数删除该滚动视图,如下所示:

local function createScrollView(event)
if(event.phase=="ended")then
    local function scrollListener( event )
        local phase = event.phase
        local direction = event.direction

        if "began" == phase then
            --print( "Began" )
        elseif "moved" == phase then
            print( "Moved" )
        elseif "ended" == phase then
            --print( "Ended" )
        end

        -- If the scrollView has reached it's scroll limit
        if event.limitReached then
            if "up" == direction then
                print( "Reached Top Limit" )
            elseif "down" == direction then
                print( "Reached Bottom Limit" )
            elseif "left" == direction then
                print( "Reached Left Limit" )
            elseif "right" == direction then
                print( "Reached Right Limit" )
            end
            end
            return true
        end

        -- Create a ScrollView
        local scrollView = widget.newScrollView
        {
            left = display.contentWidth/2-130,
            top = display.contentHeight/2-165,
            width = 440,
            height = 300,
            bottomPadding = 10,
            id = "onBottom",
            backgroundColor = { 0, 0, 0, 0 },
            horizontalScrollDisabled = true,
            verticalScrollDisabled = false,
            listener = scrollListener,
        }
    end
end
local function removeScrollView(event)
    if(event.phase==ended)then
        if scrollView then
            scrollView:removeSelf()
            scrollView = nil
        end
    end
end

它没有返回任何错误,但我可以看到 scrollView 仍然存在,因为 Corona 终端一直在“移动”打印。

你知道我怎样才能删除它吗?

【问题讨论】:

  • 快速解决方法是从local scrollView = widget.newScrollView 中删除local,使其成为全局并可从removeScrollView 访问。我怀疑使用电晕的事件系统有更好的方法。
  • 请不要简单地删除本地并使其成为全局。你正在为未来的问题做好准备。请花时间了解范围。

标签: android ios lua coronasdk


【解决方案1】:
local scrollView ------------EDITED

local function createScrollView(event)
 if(event.phase=="ended")then
   local function scrollListener( event )
     local phase = event.phase
     local direction = event.direction

    if "began" == phase then
        --print( "Began" )
    elseif "moved" == phase then
        print( "Moved" )
    elseif "ended" == phase then
        --print( "Ended" )
    end

    -- If the scrollView has reached it's scroll limit
    if event.limitReached then
        if "up" == direction then
            print( "Reached Top Limit" )
        elseif "down" == direction then
            print( "Reached Bottom Limit" )
        elseif "left" == direction then
            print( "Reached Left Limit" )
        elseif "right" == direction then
            print( "Reached Right Limit" )
        end
        end
        return true
    end

    -- Create a ScrollView
    ---EDITED---------------------
   scrollView = widget.newScrollView
    {
        left = display.contentWidth/2-130,
        top = display.contentHeight/2-165,
        width = 440,
        height = 300,
        bottomPadding = 10,
        id = "onBottom",
        backgroundColor = { 0, 0, 0, 0 },
        horizontalScrollDisabled = true,
        verticalScrollDisabled = false,
        listener = scrollListener,
    }
 end
end

local function removeScrollView(event)
 if(event.phase==ended)then
    if scrollView then
        scrollView:removeSelf()
        scrollView = nil
    end
 end
end

这样就可以在 removeScrollView 函数中移除滚动视图。

【讨论】:

  • 非常感谢 Kumar KS!有用!现在,如果我想更改滚动视图参数怎么办?例如,如何在“removeScrollView”函数中更改滚动视图的“Left”参数,而不是删除滚动视图本身?再次感谢。
  • 你可以使用object:setScrollWidth(), object:setScrollHeight()来改变它的宽度和高度。请参考这里docs.coronalabs.com/api/library/widget/newScrollView.html
猜你喜欢
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2018-07-14
相关资源
最近更新 更多