2017-03-13 4 views
0

so habe ich überall überprüft und es ist so schwer, dieses herauszufinden. Ich schreibe eine App in RubyMotion mit RedPotion, aber die meiste Hilfe, die ich hier brauche, ist mit Ruby. Die App ist so ziemlich eine Buch-App, also versuche ich herauszufinden, wie man Text richtig speichert. Grundsätzlich habe ich eine bestimmte Anzahl von Zeichen pro Zeile und nur 17 Zeilen, die ich auf dem Bildschirm verwenden kann. Sobald dies voll ist, möchte ich, dass der Rest des Textes zur Verwendung mit der gleichen Methode gespeichert wird, damit die nächste Gruppe auf dem Bildschirm erscheint, wenn die Seite umgedreht wird. Dann, wenn der Benutzer zurück wischt, damit der Text auch zurückgeht. Ich habe Arrays, Hashes ausprobiert. Verschiedene Methoden. Seit ungefähr 3 Wochen verrückt nach diesem einen Problem. Jeder kann mit einer Ruby-Methode helfen oder zwicken meins zu arbeiten?Kann mir jemand helfen zu verstehen, wie man Text recycelt?

def on_load 
@texts = [ 
      "In the beginning of God's creation of the heavens and the   earth.\nNow the earth was 
      astonishingly empty, and darkness was on the face of the deep, and the spirit of God was 
      hovering over the face of the water.\nAnd God said, 'Let there be light,' and there was light. 
      \nAnd God saw the light that it was good, and God separated between the light and between the darkness. 
      \nAnd God called the light day, and the darkness He called night, and it was evening and it was morning, 
      one day.\nAnd God said, 'Let there be an expanse in the midst of the water, and let it be a separation 
      between water and water.'" 
      ] 


    @recycle = [ @texts[ 0 ] ] 

    @page_idx = 0 


    @header = append!(UIImageView, :header) 
    @text_view = append!(UITextView, :text_view) 
    text_view(@texts[ 0 ]) 

    @text_view.on(:swipe_right) do |sender| 
    recycle_text_forward(@recycle[ -1 ]) 
    end 

    @text_view.on(:swipe_left) do |sender| 
    recycle_text_back(@recycle[ @page_idx ]) 
    end 
end 

def text_view(text) 
    page_words = text.split(' ') 

    number_of_lines_idx = 17 
    each_line_chars = 27 
    chars = "" 
    setter = "" 
    idx = 0 
    all_idx = page_words.length - 1 

    @text_view.text = "" 

    while number_of_lines_idx != 0 
    until chars.length >= each_line_chars 
    break if page_words[ idx ] == nil 
    chars << page_words[ idx ] + " " 
    chars << "\n" if chars.length >= each_line_chars 
    idx += 1 
    end 

    break if page_words[ idx ] == nil 

    number_of_lines_idx -= 1 

    if number_of_lines_idx == 0 
    @recycle << page_words[ idx..all_idx ] 
    @page_idx = @recycle.length - 2 
    end 

    setter = chars 
    chars = "" 
    @text_view.text += setter 
    end 
end 

def recycle_text_forward(text) 
text_view(text.join(' ')) 
end 

def recycle_text_back(text) 
text_view(text) 
end 

Antwort

1

Ich bin nicht sicher, ob ich die Frage richtig verstanden, aber hier ist das, was ich vorschlagen könnte:

input = "In the beginning of God's creation..." 

_, lines = input.split(/\s+/).each_with_object(["", []]) do |word, (line, lines)| 
    if line.length + word.length + 1 <= 27 
    line << " " << word 
    else 
    lines << line.dup 
    line.replace(word) 
    end 
end #⇒ Here we got an array of lines, now split by screen size: 

lines.each_slice(17).map { |*lines| lines.join(' ').strip } 
#⇒ ["In the beginning...", "and it was evening and"] 

Ich glaube, das ist ein guter Start für weitere Optimierungen wäre.

+0

Wow! Herzlichen Dank für alles. Ich kann dir nicht sagen, wie sehr ich deine Antwort schätze und so schnell auch! Dies hilft besonders beim Neuformatieren. Das Einzige, was übrig bleibt, ist, dass ich die Daten speichere. Diese 17 Zeilen sind nur ein Teil der gesamten Textmenge. Also muss ich den Rest des Textes speichern können, wenn der Benutzer wischt, damit ich die nächsten 17 Zeilen bekommen kann. Aber wenn der Benutzer nach rechts wischt, muss er auch zu den vorherigen 17 Zeilen zurückkehren. Ich hoffe ich mache ein bisschen mehr Sinn. –

+0

Es ist bereits im Ergebnis der letzten Zeile gespeichert. Es erzeugt ein Array von _screens_. Probieren Sie es selbst aus. – mudasobwa

+0

Wow! Ich wünschte ich wäre so schlau wie du. Wirklich, dass lol. Ich danke dir sehr!!!!!! –

Verwandte Themen