Wednesday, October 4, 2017

Đọc thơ Nhật cổ

Ta sẽ làm một ứng dụng đọc thơ Nhật cổ.
Copy các bài thơ tùy chọn của bạn vào notepad lưu thành file txt có Encoding là UTF-8.
Kéo các file đó vào thư mục bên trái ứng dụng, tích Copy Items is needed.
Khai báo một label tiêu đề, một tableView, imageview, mảng tên các bài thơ.
var tableView: UITableView!
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"]
let image = UIImage(named: "hoa")
var ima: UIImageView!
var la: UILabel!
Định vị, tô màu chữ, nhét vào view trong viewDidLoad.
let c = UIScreen.mainScreen().bounds.size.height
la = UILabel(frame: CGRect(x: 120, y: 10, width: 200, height: 30))
let t = "Thơ ca Nhật Bản"
let a=NSMutableAttributedString(string: t, attributes: [NSForegroundColorAttributeName: UIColor.orangeColor(), NSFontAttributeName: UIFont(name: "Georgia", size: 18.0)!])
la.attributedText = a
tableView = UITableView(frame: CGRect(x: 10, y: 70, width: 325, height: c-50))
let the = tableView
        the.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "iden")
        the.dataSource = self
        the.delegate = self
view.backgroundColor = UIColor.whiteColor()
view.addSubview(la)
view.addSubview(the)
Copy các hàm tạo tableView ra ngoài viewDidLoad.
func numberOfSections(in tableView: UITableView) ->Int {
return1
    }
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->Int {
return qua2.count
    }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("iden", forIndexPath: indexPath)
        cell.textLabel?.text = qua2[indexPath.row]
        cell.textLabel?.font = UIFont(name:"Futura", size:18)
        cell.textLabel?.textColor=UIColor.blueColor()
        cell.imageView?.image = image
        cell.accessoryType = .DisclosureIndicator
return cell
    }
func tableView(tableView: UITableView,
                   didSelectRowAtIndexPath indexPath: NSIndexPath) {
let row = qua2[indexPath.row]
let so = indexPath.row
let vc = fo()
        vc.so=so
        vc.tenbai=row
self.presentViewController(vc, animated: true, completion: nil)
    }
Chú ý hàm dưới cùng, ta set để khi người dùng chạm dòng thì sẽ chuyển tên bài thơ và số dòng sang bên class đọc.
Copy lệnh để bỏ thanh bar cột sóng ở trên.
overridefunc prefersStatusBarHidden() ->Bool {
returntrue
    }
Chạy thử để xem kết quả.


Tạo một class để đọc thơ, tên là fo chẳng hạn.
Khai báo 2 label hiển thị tên bài thơ, tác giả, 1 textView để hiện bài thơ, imageview để làm nền, các mảng cần dùng, 2 biến để nhận tên và số dòng chuyển sang.
var so=0
var tenbai = " "
let im = UIImage(named: "nen")
var la: UILabel!
var la2: UILabel!
var ima: UIImageView!
var gi:UITextView!
var ar = ["t1","t2","t3","t4","t5","t6","t7","t8"]
var tacgia = ["Teika","Jakuren","Komachi","Saigyo","Ise","Shunzei","Shotetsu","Sosei"]
Định vị trong viewDidLoad
let c = UIScreen.mainScreen().bounds.size.height
let r = UIScreen.mainScreen().bounds.size.width
la = UILabel(frame: CGRect(x: 80, y: 80, width: 100, height: 30))
la2 = UILabel(frame: CGRect(x: 140, y: 250, width: 100, height: 30))
la.text = tenbai
la2.text = tacgia[so]
la2.textColor = UIColor.darkGrayColor()
la.textColor = UIColor.magentaColor()
ima = UIImageView(frame: CGRect(x: 0, y: 0, width: r, height: c))
ima.image = im
gi = UITextView(frame: CGRect(x:50, y: 120, width: 250, height: 160))
view.backgroundColor = UIColor.whiteColor()
la.center = CGPoint(x: view.center.x, y:90)
Ta set tên bài thơ ra label thứ nhất, tên tác giả để đúng thứ tự trong mảng, lấy ra theo chỉ số dòng, set vào label 2.
Image làm nền ta cho nó kín màn hình, dùng r, c là rộng cao để set.
Khi nhét vào view, để image đầu tiên thì nó sẽ ra phía sau tất cả các view khác.
view.addSubview(ima)
view.addSubview(gi)
view.addSubview(la)
view.addSubview(la2)
Copy hàm đọc file txt vào trong viewDidLoad
let path2 = NSBundle.mainBundle().pathForResource(ar[so], ofType: "txt")!
var rea2 : String = ""
var  t = ""
do {
try rea2 = NSString(contentsOfFile: path2, encoding: NSUTF8StringEncoding) asString
            t=rea2
   }
catchlet error asNSError {
// print("ERROR : reading from file \(fileName) : \(error.localizedDescription)")
        }
gi.text = t
gi.font = UIFont.italicSystemFontOfSize(17)
gi.textColor=UIColor.blueColor()
gi.textAlignment = NSTextAlignment.Center
gi.backgroundColor=UIColor.clearColor()
Ta set chữ ra textView và đổ màu, để chữ nghiêng, set textView trong suốt bằng lệnh clearColor() để có thể thấy nền đằng sau.
Bây giờ ta muốn vuốt để trở về màn hình trước, thêm hàm sau xuống trên ngoặc đóng cuối cùng.
func tap (g:UIGestureRecognizer) {
self.dismissViewControllerAnimated(true, completion: nil)
}
Bên trong viewDidLoad thêm dòng sau.
let t2 = UIPanGestureRecognizer(target:self, action:#selector(fo.tap(_:)))
view.addGestureRecognizer(t2)
Cuối cùng là lệnh làm mất thanh bar cột sóng trên đầu ứng dụng.
overridefunc prefersStatusBarHidden() ->Bool {
returntrue
    }
}
Chạy thử để thấy ứng dụng đã hoạt động như ý muốn.



No comments:

Post a Comment