89 lines
3.1 KiB
Swift
89 lines
3.1 KiB
Swift
//
|
|
// DIYCalendarCell.swift
|
|
// FSCalendarSwiftExample
|
|
//
|
|
// Created by dingwenchao on 06/11/2016.
|
|
// Copyright © 2016 wenchao. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
import UIKit
|
|
|
|
enum SelectionType : Int {
|
|
case none
|
|
case single
|
|
case leftBorder
|
|
case middle
|
|
case rightBorder
|
|
}
|
|
|
|
|
|
class DIYCalendarCell: FSCalendarCell {
|
|
|
|
weak var circleImageView: UIImageView!
|
|
weak var selectionLayer: CAShapeLayer!
|
|
|
|
var selectionType: SelectionType = .none {
|
|
didSet {
|
|
setNeedsLayout()
|
|
}
|
|
}
|
|
|
|
required init!(coder aDecoder: NSCoder!) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
let circleImageView = UIImageView(image: UIImage(named: "circle")!)
|
|
self.contentView.insertSubview(circleImageView, at: 0)
|
|
self.circleImageView = circleImageView
|
|
|
|
let selectionLayer = CAShapeLayer()
|
|
selectionLayer.fillColor = UIColor.black.cgColor
|
|
selectionLayer.actions = ["hidden": NSNull()]
|
|
self.contentView.layer.insertSublayer(selectionLayer, below: self.titleLabel!.layer)
|
|
self.selectionLayer = selectionLayer
|
|
|
|
self.shapeLayer.isHidden = true
|
|
|
|
let view = UIView(frame: self.bounds)
|
|
view.backgroundColor = UIColor.lightGray.withAlphaComponent(0.12)
|
|
self.backgroundView = view;
|
|
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
self.circleImageView.frame = self.contentView.bounds
|
|
self.backgroundView?.frame = self.bounds.insetBy(dx: 1, dy: 1)
|
|
self.selectionLayer.frame = self.contentView.bounds
|
|
|
|
if selectionType == .middle {
|
|
self.selectionLayer.path = UIBezierPath(rect: self.selectionLayer.bounds).cgPath
|
|
}
|
|
else if selectionType == .leftBorder {
|
|
self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds, byRoundingCorners: [.topLeft, .bottomLeft], cornerRadii: CGSize(width: self.selectionLayer.frame.width / 2, height: self.selectionLayer.frame.width / 2)).cgPath
|
|
}
|
|
else if selectionType == .rightBorder {
|
|
self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds, byRoundingCorners: [.topRight, .bottomRight], cornerRadii: CGSize(width: self.selectionLayer.frame.width / 2, height: self.selectionLayer.frame.width / 2)).cgPath
|
|
}
|
|
else if selectionType == .single {
|
|
let diameter: CGFloat = min(self.selectionLayer.frame.height, self.selectionLayer.frame.width)
|
|
self.selectionLayer.path = UIBezierPath(ovalIn: CGRect(x: self.contentView.frame.width / 2 - diameter / 2, y: self.contentView.frame.height / 2 - diameter / 2, width: diameter, height: diameter)).cgPath
|
|
}
|
|
}
|
|
|
|
override func configureAppearance() {
|
|
super.configureAppearance()
|
|
// Override the build-in appearance configuration
|
|
if self.isPlaceholder {
|
|
self.eventIndicator.isHidden = true
|
|
self.titleLabel.textColor = UIColor.lightGray
|
|
}
|
|
}
|
|
|
|
}
|