2016-12-12 4 views
1

Я новичок в быстрой и я изучаю язык с воссозданием приложения 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) 
} 
+0

я думаю, что вам нужно изменить filterButton.frame –

+0

набор CGRect (х: xCoord, у: 10, ширина: 70, высота: 70) –

+0

Почему вы не используете 'UICollectionView' вместо ? Он разработан для цели, которую вы пытаетесь достичь! – Rikh

ответ

2

Я думаю, ваша проблема filterButton кадра. попробовать этот

filterButton.frame = CGRect(x: xCoord, y: 10, width: 70, height: 70) 
+0

Большое спасибо !!! ты спас мой день! Я пытался решить эту проблему уже 2 дня! Я понимаю, что моя ошибка теперь LOL благодарит! –

+0

Я рад помочь вам –

 Смежные вопросы

  • Нет связанных вопросов^_^