Wednesday, October 4, 2017

Đọc thơ Nhật cổ (2)

Ta muốn phần đọc thơ có thể chạm hoặc vuốt màn hình để ra bài mới, người dùng chọn bài nào chuyển sang xong cứ chạm vào là đến bài tiếp theo.
Ví dụ người dùng chọn bài 5, đọc xong vuốt sang bài 6, 7, 8 rồi lại quay về bài 1. Tức là không cần thoát về màn hình trước, cứ vuốt ngang là ra hết các bài.
Ta sẽ dùng GestureRecognizer để làm.
Copy mảng qua2 là tên các bài thơ sang class đọc và khai báo thêm 4 mảng mới.
var qua2=["Bài một","Bài hai","Bài ba","Bài bốn","Bài năm","Bài sáu","Bài bảy","Bài tám"]
var ten2 = [String](count: 8, repeatedValue: " ")
var tacgia2 = [String](count: 8, repeatedValue: " ")
var ar2 = [String](count: 8, repeatedValue: " ")
var noidung = [String](count: 8, repeatedValue: " ")
Khai báo thêm 2 biến số để dùng
var vi=0
var so2=0
Bây giờ ta sẽ đọc toàn bộ nội dung của các bài thơ vào mảng noidung ở trên, mỗi bài thơ thành một phần tử.
Copy vào trong viewDidLoad
for i in0..<ar.count {
let path2 = NSBundle.mainBundle().pathForResource(ar[i], ofType: "txt")!
var rea2 : String = ""
var  t = ""
do {
try rea2 = NSString(contentsOfFile: path2, encoding: NSUTF8StringEncoding) asString
 t=rea2
noidung[i]=t
        }
catchlet error asNSError {
// print("ERROR : reading from file \(fileName) : \(error.localizedDescription)")
        }
        }
Bây giờ có một vấn đề là ta phải đảo mảng, cho vị trí bài thơ được chọn đọc lên đầu, các vị trí sau cứ thế tiếp tục, đến hết bài thứ 8 lại quay về đầu tiên bài 1.
Mục đích để khi người dùng vuốt hoặc chạm màn hình thì các bài cứ thế theo nhau hiện ra. Copy vào trên dòng set chữ ra textView.
for i in0..<tacgia.count {
so2=so+i
if(so2>7){
so2=so2-8
 }
ten2[i]=qua2[so2]
tacgia2[i]=tacgia[so2]
ar2[i]=noidung[so2]
        }
Vị trí bài chọn sẽ lên đầu trong các mảng có số 2, tiếp theo cứ thế nối đuôi vào.
Sửa dòng set chữ ra textView thành.
gi.text = ar2[0]
Ta set bài chọn đọc ra textview, chính là bài đầu tiên của mảng mới.
Tạo hàm để khi người dùng chạm màn hình thì chuyển sang bài tiếp, copy ra ngoài viewDidLoad.
func tap2 (g:UIGestureRecognizer) {
vi=vi+1
if(vi>7){
vi=vi-8
        }
gi.text = ar2[vi]
la.text = ten2[vi]
la2.text = tacgia2[vi]
 }
Ta để biến đếm vi=0, khi có chạm ta tăng biến đếm lên một đơn vị, lấy đó để set bài tiếp theo ra, cả tên bài, tác giả cũng thế.
Copy vào trong viewDidLoad để gán hàm cho hành vi chạm màn hình.
let t3 = UITapGestureRecognizer(target:self, action:#selector(fo.tap2(_:)))
 t3.numberOfTapsRequired=2
view.addGestureRecognizer(t3)
Nếu để numberOfTapsRequired=1 thì một chạm sẽ chuyển màn hình, 2 là kích đúp.
Nếu muốn để là vuốt thì do ta đã dùng vuốt để quay về màn hình trước rồi, phải chọn cách khác để quay về màn hình trước. Sau đó sửa hàm trong lệnh vuốt thành tap2 là được.
let t2 = UIPanGestureRecognizer(target:self, action:#selector(fo.tap2(_:)))
view.addGestureRecognizer(t2)



No comments:

Post a Comment