nicklockwood에서 제공 한 iCarousel을 macOs 앱으로 가져 왔습니다. https://github.com/nicklockwood/iCarouseliCarousel은 크기 변경 후 이미지 만 표시합니다.
응용 프로그램은 Swift로 작성되었습니다. 모든 작업 (.m 및 .h 파일 가져 오기, 브리징 헤더 추가)을 관리 한 후에는 사소한 것이 하나 있습니다.
일단 앱이 시작되고 NSViewController가 활성화되면 빈 ViewController가 표시됩니다. 보기의 크기를 조정하기 시작한 경우에만로드 된 모든 그림이있는 iCarousel이 표시됩니다.
내 코드는 다음과 같습니다
class CarouselViewController: NSViewController, iCarouselDataSource, iCarouselDelegate {
var images = [NSImage]()
@IBOutlet var carousel: iCarousel!
override func awakeFromNib() {
super.awakeFromNib()
loadImages()
}
override func viewDidLoad() {
super.viewDidLoad()
self.carousel.type = iCarouselType.coverFlow
self.carousel.dataSource = self
self.carousel.delegate = self
carousel.reloadData()
}
func loadImages() {
let filePath = "/pics/"
let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.picturesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first
let path = paths?.appending(filePath)
//
let fileManager = FileManager.default
let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: path!)!
while let element = enumerator.nextObject() as? String {
if element.hasSuffix("jpg") || element.hasSuffix("png") {
if let image = NSImage(contentsOfFile: path! + element) {
print("File: \(path!)\(element)")
self.images.append(image)
}
}
}
}
func numberOfItems(in carousel: iCarousel) -> Int {
return images.count
}
func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: NSView?) -> NSView {
let imageView = NSImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
imageView.image = self.images[index]
imageView.imageScaling = .scaleAxesIndependently
return imageView
}
func carouselItemWidth(_ carousel: iCarousel) -> CGFloat {
return 200.0
}
}
어떻게 처음 크기를 조정하지 않고 내 iCarousel을 표시 관리 할 수 있습니까?
회전 목마의 실제 이미지의 도면이 layOutItemViews 또는 layoutSubviews에 의해 트리거 :
내가 하나 개의 솔루션을 발견 한 것 같아요 당신에게
델리게이트와 데이터 소스를 수동으로 추가하여 문제가 해결 될 것이라고 생각했습니다. 내 초기 버전에서는 동일한 결과로 스토리 보드와 연결 관리자를 통해 데이터 소스와 위임을 연결했습니다. –