Я работал над приложением с существующим кодом предыдущей команды, и некоторые из нас работали над ним уже довольно давно, и ничто из того, что мы делаем, не заставит отображаться штрихи.
У нас есть несколько файлов, один из которых называется TraceViewController, с UICollectionView с выбором всех букв в алфавите. Когда вы нажимаете на одну из них, она отображает букву для отслеживания. У нас также был настроен класс CanvasView, связанный с UIView в раскадровке. Тем не менее, независимо от того, что мы делаем, теперь будут отображаться штрихи. Мы даже точно следовали этому руководству, используя код из GitHub: https://www.youtube.com/watch?v=kAiknPhkWmc, и мы все еще не можем отобразить штрихи. Если мы запустим проект отдельно, это нормально, но копирование его в наш проект, таким же образом, ничего не даст нам.
Мы думали, что это может быть связано с тем, что он скрыт за изображением письма это отображается, когда эта буква нажата в представлении коллекции, но мы также попытались безуспешно запрограммировать canvasView на sendToFront.
Я не совсем уверен, как разместить код, так как это 3 файла с много кода, но мне было интересно, есть ли у кого-нибудь идеи о том, что может пойти не так? Кажется, все розетки подключены нормально, и мы совершенно уверены, что фактический рисунок запускается и отображается в фоновом режиме, но мы просто ничего не видим.
Пожалуйста, дайте мне знать, если есть какие-либо части код, который может быть полезен для понимания проблемы.
Вот класс CanvasView, взятый из руководства:
import Foundation
import UIKit
struct TouchPointsAndColor {
var color: UIColor?
var width: CGFloat?
var opacity: CGFloat?
var points: [CGPoint]?
init(color: UIColor, points: [CGPoint]?) {
self.color = color
self.points = points
}
}
class CanvasView: UIView {
var lines = [TouchPointsAndColor]()
var strokeWidth: CGFloat = 1.0
var strokeColor: UIColor = .black
var strokeOpacity: CGFloat = 1.0
override func draw(_ rect: CGRect) {
super.draw(rect)
print("drawing")
guard let context = UIGraphicsGetCurrentContext() else {
return
}
lines.forEach { (line) in
for (i, p) in (line.points?.enumerated())! {
if i == 0 {
context.move(to: p)
} else {
context.addLine(to: p)
}
context.setStrokeColor(line.color?.withAlphaComponent(line.opacity ?? 1.0).cgColor ?? UIColor.black.cgColor)
context.setLineWidth(line.width ?? 1.0)
}
context.setLineCap(.round)
context.strokePath()
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
lines.append(TouchPointsAndColor(color: UIColor(), points: [CGPoint]()))
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first?.location(in: nil) else {
return
}
guard var lastPoint = lines.popLast() else {return}
lastPoint.points?.append(touch)
lastPoint.color = strokeColor
lastPoint.width = strokeWidth
lastPoint.opacity = strokeOpacity
lines.append(lastPoint)
setNeedsDisplay()
}
func clearCanvasView() {
lines.removeAll()
setNeedsDisplay()
}
func undoDraw() {
if lines.count > 0 {
lines.removeLast()
setNeedsDisplay()
}
}
}
TraceViewController:
import Foundation
import UIKit
import AVFoundation
protocol CollectionViewCellDelegate: class {
func didSelect(_ cell: UICollectionViewCell ,_ button: UIButton)
}
class TraceViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 26;
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "letterCell",
for: indexPath)
//cell.backgroundColor = UIColor.black
switch currentType
{
case "AnimalUpper":
cell.backgroundView = UIImageView(image: UIImage(named: "set1_\(alphabet[indexPath.row]).png"))
case "AnimalLower":
cell.backgroundView = UIImageView(image: UIImage(named: "set2_\(alphabet[indexPath.row]).png"))
case "FontUpper":
cell.backgroundView = UIImageView(image: leafCreator(ALPHABET[indexPath.row]))
case "FontLower":
cell.backgroundView = UIImageView(image: leafCreator(alphabet[indexPath.row]))
default:
break;
}
//cell.backgroundView = UIImageView(image: UIImage(named: "set1_\(alphabet[indexPath.row]).png"))
//cell.backgroundView = [[UIImageView alloc] initWithImage:[self getImageForLetter:letter]];
// Configure the cell
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 118, height: 118)
}
weak var delegate: CollectionViewCellDelegate?
// @IBOutlet weak var AnimalView: UIView!
// @IBOutlet weak var FontView: UIView!
@IBOutlet weak var btnBack: UIButton!
@IBOutlet weak var traceView: UIImageView!
@IBOutlet weak var btnRetry: UIButton!
@IBOutlet weak var letterStyle: UISegmentedControl!
@IBOutlet weak var letterImage: UIImageView!
@IBOutlet weak var colViewTrial: UICollectionView!
@IBOutlet weak var imagestyle: UISegmentedControl!
@IBOutlet weak var AnimalColView: UIView!
@IBOutlet weak var FontLowerColView: UIView!
@IBOutlet weak var FontUpperColView: UIView!
@IBOutlet weak var canvasView: CanvasView!
//Tracing
@IBOutlet weak var congratulationsImage: UIImageView!
var congratulations: [UIImage]!
var player: AVAudioPlayer?
let congratulationsAnimDuration = 1.3
let congratulationsAnimFadeOutAfter = 1.5
var audioPlayer: AVAudioPlayer!
var currentType = "AnimalUpper";
//var currentLetter = "A";
var alphabet: [String]!
var ALPHABET: [String]!
var app = AppDelegate();
static var curLetter = "A"
let cellSize = CGSize(width: 118, height: 118)
var blurView = UIVisualEffectView()
var colorsArray: [UIColor] = [#colorLiteral(red: 1, green: 0.1491314173, blue: 0, alpha: 1), #colorLiteral(red: 0.9529411793, green: 0.6862745285, blue: 0.1333333403, alpha: 1), #colorLiteral(red: 1, green: 0.4059419876, blue: 0.2455089305, alpha: 1), #colorLiteral(red: 0.1764705926, green: 0.01176470611, blue: 0.5607843399, alpha: 1), #colorLiteral(red: 0.1764705926, green: 0.4980392158, blue: 0.7568627596, alpha: 1), #colorLiteral(red: 1, green: 0.4059419876, blue: 0.2455089305, alpha: 1), #colorLiteral(red: 0.06274510175, green: 0, blue: 0.1921568662, alpha: 1), #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1), #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1), #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1), #colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1), #colorLiteral(red: 0.8549019694, green: 0.250980407, blue: 0.4784313738, alpha: 1), #colorLiteral(red: 0.9411764741, green: 0.4980392158, blue: 0.3529411852, alpha: 1), #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1), #colorLiteral(red: 0.3176470697, green: 0.07450980693, blue: 0.02745098062, alpha: 1), #colorLiteral(red: 0.9529411793, green: 0.6862745285, blue: 0.1333333403, alpha: 1), #colorLiteral(red: 0.3823936913, green: 0.8900789089, blue: 1, alpha: 1), #colorLiteral(red: 1, green: 0.4528176247, blue: 0.4432695911, alpha: 1), #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1), #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)]
@IBAction func btnBackDown(_ sender: Any) {
btnBack.setImage(UIImage(named:"backButtonDown.png"), for: .normal)
}
@IBAction func btnBackPressed(_ sender: Any) {
btnBack.setImage(UIImage(named:"backButtonUp.png"), for: .normal)
//add audio file to button
let audioFilePath = Bundle.main.path(forResource: "Click", ofType: "mp3")
let audioUrl = NSURL(fileURLWithPath: audioFilePath!)
audioPlayer = try! AVAudioPlayer(contentsOf: audioUrl as URL)
audioPlayer.play()
self.dismiss(animated: true, completion: nil)
}
@IBAction func btnBackUpOutside(_ sender: Any) {
btnBack.setImage(UIImage(named:"backButtonUp.png"), for: .normal)
}
@IBAction func retryButtonPress(_ sender: UIButton) {
//canvasView.clearCanvas()
}
@IBAction func soundButtonPress(_ sender: UIButton) {
//playSound(soundFile: "\(self.canvasView.letter.lowercased()) letter")
}
@IBAction func indexChanged(_ sender: Any) {
switch letterStyle.selectedSegmentIndex
{
case 0:
switch imagestyle.selectedSegmentIndex {
case 0:
currentType = "AnimalUpper"
print(currentType)
case 1:
currentType = "FontUpper"
print(currentType)
default:
break;
}
case 1:
switch imagestyle.selectedSegmentIndex {
case 0:
currentType = "AnimalLower"
print(currentType)
case 1:
currentType = "FontLower"
print(currentType)
default:
break;
}
default:
break;
}
self.colViewTrial.reloadData()
}
@IBAction func fontChange(_ sender: Any) {
switch imagestyle.selectedSegmentIndex {
case 0:
switch letterStyle.selectedSegmentIndex {
case 0:
currentType = "AnimalUpper"
print(currentType)
case 1:
currentType = "AnimalLower"
print(currentType)
default:
break
}
case 1:
switch letterStyle.selectedSegmentIndex {
case 0:
currentType = "FontUpper"
print(currentType)
case 1:
currentType = "FontLower"
print(currentType)
default:
break
}
default:
break
}
self.colViewTrial.reloadData()
}
// Get the point where the user clicks and converts to where in the collection view it is
@IBAction func letterChange(_ sender: UIButton) {
let hitPoint = sender.convert(CGPoint.zero, to: colViewTrial)
let idxPth = colViewTrial.indexPathForItem(at: hitPoint)
if idxPth != nil {
TraceViewController.curLetter = ALPHABET[idxPth!.row]
switch currentType
{
case "AnimalUpper":
letterImage.image = UIImage(named: "Big\(TraceViewController.curLetter).png")
case "AnimalLower":
letterImage.image = UIImage(named: "Small\(TraceViewController.curLetter).png")
case "FontUpper":
letterImage.image = UIImage(named: "Big\(TraceViewController.curLetter).png")
case "FontLower":
letterImage.image = UIImage(named: "Small\(TraceViewController.curLetter).png")
default:
break;
}
}
print(TraceViewController.curLetter)
}
override func viewDidLoad() {
super.viewDidLoad()
//view.addSubview(canvasView)
self.view.backgroundColor = UIColor(patternImage: UIImage(named:"Background_main.png")!)
//self.canvasView.clearCanvas()
letterImage.image = UIImage(named: "Big\(TraceViewController.curLetter).png")
//viewDidLoad() is being called every time letter is changed - remove current drawings
// self.canvasView.letter = TraceViewController.curLetter
print(app.getFont()!)
alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
ALPHABET = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
func leafCreator(_ letter: String) -> UIImage {
let tempImage = UIImage(named: "Leaf_Front.png")
let font = UIFont(name: app.getFont(), size: 70)
let paraStyle = NSMutableParagraphStyle()
paraStyle.alignment = .center
var leafImage: UIImage?
UIGraphicsBeginImageContext(cellSize)
tempImage?.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: cellSize))
let rect = CGRect(origin: CGPoint(x: 15, y: 25), size: CGSize(width: 85, height: 85))
UIColor.black.set()
let attrsDict = [NSAttributedString.Key.font: font, NSAttributedString.Key.paragraphStyle:paraStyle]
letter.draw(in:rect, withAttributes: attrsDict as [NSAttributedString.Key : Any])
leafImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return leafImage!
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromAVAudioSessionCategory(_ input: AVAudioSession.Category) -> String {
return input.rawValue
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromAVFileType(_ input: AVFileType) -> String {
return input.rawValue
}