Я новичок в быстрой и я изучаю язык с воссозданием приложения Instagram. У меня проблема с фильтрами. Когда я запускаю его на симуляторе, все работает отлично, за исключением scrollview. он должен показывать все фильтры, как в приложении Instagram. но он показывает только 1 фильтр (последний из CIFilternames), как я могу получить другие фильтры в качестве кнопки рядом с той, которая есть?Добавить кнопки «фильтр» на Scrollview
in the Scrollview should be more filters than one
var CIFilterNames = [
"CIPhotoEffectChrome",
"CIPhotoEffectFade",
"CIPhotoEffectInstant",
"CIPhotoEffectNoir",
"CIPhotoEffectProcess",
"CIPhotoEffectTonal",
"CIPhotoEffectTransfer",
"CISepiaTone",
"CIPhotoEffectInstant",
]
override func viewDidLoad() {
super.viewDidLoad()
imageview.image = receivedImage
var xCoord: CGFloat = 5
let yCoord: CGFloat = 10
let buttonWidth:CGFloat = 70
let gapBetweenButtons: CGFloat = 5
var itemCount = 0
for i in 0..<CIFilterNames.count {
itemCount = i
// Button properties
let filterButton = UIButton(type: .custom)
filterButton.frame = CGRect(x: 5, y: 10, width: 70, height: 70)
filterButton.tag = itemCount
filterButton.addTarget(self, action: #selector(secendTestViewController.filterButtonTapped(sender:)), for: .touchUpInside)
filterButton.layer.cornerRadius = 6
filterButton.clipsToBounds = true
// Create filters for each button
let ciContext = CIContext(options: nil)
let coreImage = CIImage(image: receivedImage)
let filter = CIFilter(name: "\(CIFilterNames[i])")
filter!.setDefaults()
filter!.setValue(coreImage, forKey: kCIInputImageKey)
let filteredImageData = filter!.value(forKey: kCIOutputImageKey) as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, from: filteredImageData.extent)
let imageForButton = UIImage(cgImage: filteredImageRef!);
filterButton.setBackgroundImage(imageForButton, for: .normal)
// Add Buttons in the Scroll View
xCoord += buttonWidth + gapBetweenButtons
filterScrollView.addSubview(filterButton)
} // END FOR LOOP
// Resize Scroll View
filterScrollView.contentSize = CGSize(buttonWidth * CGFloat(itemCount + 2), yCoord)
}
func filterButtonTapped(sender: UIButton) {
let button = sender as UIButton
imageToFilter.image = button.backgroundImage(for: UIControlState.normal)
}
я думаю, что вам нужно изменить filterButton.frame –
набор CGRect (х: xCoord, у: 10, ширина: 70, высота: 70) –
Почему вы не используете 'UICollectionView' вместо ? Он разработан для цели, которую вы пытаетесь достичь! – Rikh