应用AVVideoComposition到我的后AVPlayerItem,我应用的过滤器确实有效,但视频在旋转中旋转AVPlayerLayer.
我知道问题不在于过滤后的帧,因为如果我在a中显示帧UIImageView,则帧会100%正确呈现.
视频显示正确,直到我申请videoComposition.设置videoGravity上AVPlayerLayer没有帮助.
视频顺时针旋转90º并在图层中拉伸.
基本上,视频在通过AVPlayerLayer之前AVPlayerItem被完美地显示AVMutableVideoComposition.一旦发生这种情况,视频将旋转-90º,然后进行缩放以适应与过滤前视频相同的尺寸.这告诉我,它没有意识到它的变换已经是正确的,因此它正在重新应用变换本身.
为什么会发生这种情况,我该如何解决?
这是一些代码:
private func filterVideo(with filter: Filter?) {
if let player = player, let playerItem = player.currentItem {
let composition = AVMutableComposition()
let videoAssetTrack = playerItem.asset.tracks(withMediaType: .video).first
let videoCompositionTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
try? videoCompositionTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: playerItem.asset.duration), of: videoAssetTrack!, at: kCMTimeZero)
videoCompositionTrack?.preferredTransform = videoAssetTrack!.preferredTransform
let videoComposition = AVMutableVideoComposition(asset: composition, applyingCIFiltersWithHandler: { …Run Code Online (Sandbox Code Playgroud) 想象一下在平面上散布着一些半径的几个径向渐变。渐变的中心是这样排列的,例如:
A D
B
C
E F
Run Code Online (Sandbox Code Playgroud)
现在从这些中心中的每一个出来是具有一定半径的径向渐变。我知道如何创建渐变,但我想知道如何在它们重叠时组合这些渐变。
上面的安排看起来像下图。如您所见,(0,0) 处有红色径向渐变,(3,0) 处为蓝色,(1,1) 处为黄色,(2,2) 处为红色,等等,它们都混合在一起. 此外,每个梯度都有不同的半径。
这是以下排列中径向渐变混合的示例:
B
A
Run Code Online (Sandbox Code Playgroud)
我试图找到关于此的阅读,但令人惊讶的是,点击率很少(只有 5 或 6),所有这些都是如何在 Illustrator 或 Photoshop 中执行此操作。我也尝试过自己编程,但问题是遇到梯度交集的时候不知道怎么办;平均颜色是错误的并且出现断断续续的情况,这就是我(相当长的)第一次尝试所做的。
我如何在 Swift 中的 iOS 上将渐变混合在一起的情况下实现这种效果?任何建议、参考或任何东西都非常感谢
我已经尝试了几个小时来找到boundingRect我所拥有的UILabel中的字符串,但似乎没有任何工作.
据我所知,boundingRect返回标签中实际文本的大小,而不是标签的大小或类似的大小.这是真的,对吗?
我有一个UILabel被调用的messageLabel包含一些文本,包含无限数量的行.
我现在的代码是这样的:
let labelRect = (message as NSString).boundingRect(with: messageLabel.frame.size,
options: .usesLineFragmentOrigin,
attributes: [NSFontAttributeName : messageLabel.font],
context: nil)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这为我的文本返回了完全错误的维度.
在多行UILabel中返回文本尺寸的正确方法是什么?
我有一个功能来过滤 AVPlayerItem 的资产。问题之一是设置视频的转换。但是,每当我设置 的AVMutableVideoCompositionInstruction时AVMutableVideoComposition,就不再调用处理程序。
这是我的代码:
private func filter(playerItem: AVPlayerItem) {
let videoComposition = AVMutableVideoComposition(asset: playerItem.asset, applyingCIFiltersWithHandler: { (request) in
print("Composing") // does not print whenever the instructions are added
if let filteredImage = filterImage(request.sourceImage) {
request.finish(with: filteredImage, context: nil)
} else {
request.finish(with: RenderError.couldNotFilter) // An error
}
})
guard let videoTrack = playerItem.asset.tracks(withMediaType: .video).first else { return }
let size = CGSize(width: videoTrack.naturalSize.height, height: videoTrack.naturalSize.width)
videoComposition.renderSize = size
let videoInstruction = AVMutableVideoCompositionInstruction()
videoInstruction.timeRange = CMTimeRange(start: …Run Code Online (Sandbox Code Playgroud) 我在此处和此处遵循Google Maps iOS SDK 的热图代码,但是热图未在我的地图上呈现。已通过Cocoapods添加了Google Maps API,并使用此桥接标头手动添加了Google Maps iOS Utils框架:
#import "GMUMarkerClustering.h"
#import "GMUGeometryRenderer.h"
#import "GMUHeatmapTileLayer.h"
#import "GQTPointQuadTree.h"
Run Code Online (Sandbox Code Playgroud)
这是添加热图的代码:
func addHeatmap() {
heatmapLayer = GMUHeatmapTileLayer()
heatmapLayer.map = map
var list = [GMUWeightedLatLng]()
do {
if let path = Bundle.main.url(forResource: "police_stations", withExtension: "json") {
let data = try Data(contentsOf: path)
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let object = json as? [[String: Any]] {
for item in object {
let lat = item["lat"]
let …Run Code Online (Sandbox Code Playgroud) 我通过解析GeoJSON向我的GMSMapView添加了功能。但是,在弄清楚如何设置此功能样式时,我遇到了极大的麻烦。
当前,该功能是默认的蓝色笔触和半透明的蓝色填充。我想改变这些颜色。我尝试查看了文档,但这是毫无帮助的。我在互联网上可以找到的所有其他问题都与JavaScript API有关。
如何在Google Map上设置特定功能的样式(仅是GeoJSON文件中的样式)?优选地,这将是动态的,但并非必须如此。
ios ×6
swift ×6
avfoundation ×2
google-maps ×2
cifilter ×1
geojson ×1
gradient ×1
heatmap ×1
swift3 ×1
swift4 ×1