【发布时间】:2023-03-19 08:56:01
【问题描述】:
我有一个UIViewController,它也是一个UIScrollViewDelegate
UIViewController 有多张幻灯片是 UIViews,对于每张幻灯片,我想以编程方式设置不同的渐变背景颜色,但它似乎不起作用,因为没有设置渐变。
我的UIView 分机
import UIKit
extension UIView {
func addGradient(){
let gradient = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = [UIColor.black, UIColor.orange]
let backgroundIndex:UInt32 = 0;
self.layer.insertSublayer(gradient, at: backgroundIndex)
}
}
我的FirstSlide 拥有自己的FirstSlide.xib
import UIKit
class FirstSlide: UIView {
}
在我的WelcomeSliderViewController
import UIKit
class WelcomeSliderViewController: UIViewController, UIScrollViewDelegate{
@IBOutlet weak var slideScrollView: UIScrollView!
@IBOutlet weak var pagerControl: UIPageControl!
override func viewDidLoad() {
super.viewDidLoad()
slideScrollView.delegate = self
let slides = createSlides()
setupSliderView(slides: slides)
pagerControl.numberOfPages = slides.count
pagerControl.currentPage = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func pagerControlClicked(_ sender: Any) {
self.slideScrollView
.scrollRectToVisible(CGRect(
x: Int(self.slideScrollView.frame.size.width) * self.pagerControl.currentPage,
y: 0,
width:Int(self.slideScrollView.frame.size.width),
height: Int(self.slideScrollView.frame.size.height)),
animated: true)
}
func createSlides() -> [UIView] {
let firstSlide: FirstSlide = Bundle.main.loadNibNamed("FirstSlide", owner:self , options: nil)?.first as! FirstSlide
let secondSlide: SecondSlide = Bundle.main.loadNibNamed("SecondSlide", owner:self , options: nil)?.first as! SecondSlide
firstSlide.addGradient()
return [firstSlide, SecondSlide]
}
func setupSliderView(slides:[UIView]) {
slideScrollView.frame = CGRect(x: 0, y:0, width: view.frame.width, height: view.frame.height)
slideScrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height)
for i in 0 ..< slides.count{
slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
slideScrollView.addSubview(slides[i])
}
}
func scrollViewDidEndDecelerating(_ scrollView : UIScrollView){
let pageIndex = round(scrollView.contentOffset.x / view.frame.width)
pagerControl.currentPage = Int(pageIndex)
}
}
【问题讨论】: